news 2026/7/30 10:05:58

12.16 - 全排列 C语言中声明和定义的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
12.16 - 全排列 C语言中声明和定义的区别

目录

1.全排列

a.核心思想

b.思路

c.步骤

2.C语言中声明和定义的区别

a.核心区别

b.场景对比

c.关键规则

d.特殊情况


1.全排列

46. 全排列 - 力扣(LeetCode)https://leetcode.cn/problems/permutations/

class Solution { public: // 回溯算法核心实现 // start - 当前处理的起始位置 void backtrack(vector<int>& nums, int start, vector<vector<int>>& rev) { if (start == nums.size()) { rev.push_back(nums); return; } // 遍历从start到数组末尾的所有元素 for(int i = start; i < nums.size(); i++) { swap(nums[start], nums[i]); backtrack(nums, start+1, rev); swap(nums[start], nums[i]); } } vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> revv; backtrack(nums, 0, revv); return revv; } };

a.核心思想

利用回溯算法,通过递归的方式生成所有可能的排列,在递归过程中通过交换元素的位置来生成不同的排列,当处理到数组末尾时,将当前排列加入结果集。

b.思路

回溯法是一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化来丢弃该解,即“回溯”并尝试其他可能性。

c.步骤

① 定义一个递归函数,用于生成排列。

② 在递归函数中,从当前位置开始,依次将每个元素交换到当前位置。

③ 递归处理下一个位置。

④ 当处理到数组末尾时,将当前排列加入结果集。

⑤ 回溯,恢复数组原来的状态,以便进行下一次交换。

2.C语言中声明和定义的区别

a.核心区别

声明:告知编译器标识符(变量/函数/类型)的存在及类型,不分配内存。可多次出现(如头文件中的extern声明)。

  • 示例:extern int a;(变量声明)、int func(int, int);(函数声明)。

定义:分配内存并创建实体,可包含初始化(变量)或具体实现(函数)。同一作用域只能定义一次。

  • 示例:int a = 10;(变量定义)、int func() { return 0; }(函数定义)。

b.场景对比

类型

声明

定义

变量

extern int global;(不分配内存)

int global = 0;(分配内存+初始化)

函数

double add(double, double);

double add(double a, double b) { return a+b; }

结构体

struct Point;(不完整类型声明)

struct Point { int x, y; };(完整类型定义)

数组

extern int arr[10];

int arr[10] = {0};

c.关键规则

唯一性:定义只能出现一次(如全局变量、函数体),声明可多次(如头文件中的extern)。

内存分配:定义必然分配内存,声明不分配(除非定义时隐含声明)。

初始化:带初始化的变量声明(如int a=5;)本质是定义;extern声明不可初始化。

头文件作用:头文件通常存放声明(函数原型、extern变量),源文件存放定义(函数实现、变量初始化)。

d.特殊情况

结构体/联合体:声明(如struct S;)需后续定义才能使用成员;定义(如struct S { int x; };)直接创建完整类型。

匿名结构体:struct { int x; } var;同时完成声明与定义,无法复用类型。

函数参数:形参列表中的变量名仅是声明(如void func(int a);),不分配内存。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 7:50:31

BONT-L肽有效成分:棕榈酰六肽-19 Palmitoyl Hexapeptide-19

棕榈酰六肽-19通过放松肌肉和防止乙酰胆碱的释放来实现抗衰老效果&#xff0c;从而使皮肤看起来更年轻。棕榈酰六肽-19是BONT-L-Peptide中的有效成分&#xff0c;BONT-L-Peptide来自西班牙公司Infinitec。棕榈酰六肽-19能有效阻断从神经到面部肌肉的信号&#xff0c;防止收缩和…

作者头像 李华
网站建设 2026/7/29 15:06:21

1、Linux网络管理与资源指南

Linux网络管理与资源指南 1. 网络时代与Linux简介 在当今许多国家,互联网已成为家喻户晓的词汇,计算机网络正逐渐走向像电视机和微波炉一样普及。尽管网络的存在由来已久,但如今全球网络的迅速发展,使得即使是小型非营利组织和个人计算机用户也能轻松加入全球网络。 谈及…

作者头像 李华
网站建设 2026/7/30 9:50:53

9、Linux 下 PPP 协议的深入解析与配置指南

Linux 下 PPP 协议的深入解析与配置指南 1. PPP 协议概述 PPP(Point-to-Point Protocol)是一种用于通过串行连接发送数据报的协议,它解决了 SLIP 协议的一些不足。与 SLIP 不同,PPP 可以承载多种协议,不仅限于 IP 协议,还能在链路上进行错误检测。此外,PPP 允许通信双…

作者头像 李华
网站建设 2026/7/30 4:08:24

13、Linux网络重要特性全解析

Linux网络重要特性全解析 1. 网络应用基础 在成功设置好IP和解析器后,我们需要关注通过网络提供的服务。这里将介绍一些简单网络应用的配置,包括inetd服务器和rlogin家族的程序,还会简要提及远程过程调用(RPC)接口。不过,像网络文件系统(NFS)和网络信息系统(NIS)等…

作者头像 李华
网站建设 2026/7/27 17:48:13

17、深入了解 Taylor UUCP:原理、配置与应用

深入了解 Taylor UUCP:原理、配置与应用 1. UUCP 简介 UUCP(Unix-to-Unix Copy Program)由 AT&T 贝尔实验室的 Mike Lesk 在 20 世纪 70 年代末设计,旨在通过公共电话线提供简单的拨号网络。尽管如今拨号 PPP 和 SLIP 连接到互联网很流行,但许多希望在家用机器上使用…

作者头像 李华
网站建设 2026/7/26 15:32:08

避开“入狱”陷阱:零基础网络安全入门实战指南与知识图谱

引言 随着数字化时代的到来&#xff0c;网络安全已成为企业和个人不可或缺的防护屏障。无论是防止数据泄露&#xff0c;还是抵御黑客攻击&#xff0c;网络安全工程师的角色越来越重要。 那么&#xff0c;如果你想入行网络安全&#xff0c;需要学习哪些知识点呢&#xff1f; …

作者头像 李华