46. 全排列
✅做题思路or感想
排列问题,一眼回溯法
排列问题注重元素间的排序,而集合问题不用。
故这里并不需要startIndex
来进行控制元素取值范围,而是需要用used
数组来记录元素是否使用过,避免一个元素的多次使用
递归三部曲
递归参数
- 用一个
used
数组来记录使用记录
递归中止条件
- 当
temp
和原数组等大时,就可以收网了
递归单层逻辑
- 判断元素是否使用过,若没用过,则加入
temp
中
class Solution {
public:
vector<int>temp;
vector<vector<int>>result;
void dfs(vector<int>& nums, vector<bool>& used) {
//递归中止条件
if (temp.size() == nums.size()) {
result.push_back(temp);
return;
}
for (int i = 0; i < nums.size(); i++) {
//防止一个元素使用多次
if (used[i] == false) {
temp.push_back(nums[i]);
used[i] = true;
dfs(nums, used);
temp.pop_back();
used[i] = false;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool>used(nums.size(), false);
dfs(nums, used);
return result;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端