124、【回溯算法】leetcode ——46. 全排列(C++版本)
2023-09-11 14:20:01 时间
题目描述
原题链接:46. 全排列
解题思路
本题是排列问题与组合问题区别在于,排列问题是区分元素顺序的,同一个元素占据不同的位置,代表不一样的结果。而组合问题不区分元素顺序,同一个元素,只要在这个结果中无论占据那个位置都认为相同的。即数组1, 2
的排列可以有1, 2
和2, 1
作为两个不同的结果,而组合对于1, 2
和2, 1
认为是通过一种结果。
此题是排列的一般性问题,数组中无重复元素,不允许单个结果内有重复元素,但要求获取按不同顺序获取的数。设置一个vector<bool> visited
来判定元素之前是否访问过,若访问过则访问其余元素。
class Solution {
public:
vector<int> path;
vector<vector<int>> res;
void backtracking(vector<int> nums, vector<bool> visited) {
if(path.size() == nums.size()) {
res.push_back(path);
return ;
}
for(int i = 0; i < nums.size(); i++) {
if(visited[i] == false) {
visited[i] = true;
path.push_back(nums[i]);
backtracking(nums, visited);
path.pop_back();
visited[i] = false;
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> visited(nums.size(), false);
backtracking(nums, visited);
return res;
}
};
参考文章:46. 全排列
相关文章
- 托管C++线程锁实现 c++11线程池
- iOS 静态类库 打包 C,C++文件及和OC混编
- 57 C++ - 函数模板
- 200、【数组】leetcode ——6316. 重排数组以得到最大前缀分数(C++版本)
- 147、【动态规划】leetcode ——62. 不同路径:递归法+迭代法(C++版本)
- 143、【回溯算法】leetcode ——738. 单调递增的数字:暴力法+贪心法(C++版本)
- 138、【贪心算法】leetcode ——452. 用最少数量的箭引爆气球(贪心区间重叠问题)(C++版本)
- 132、【贪心算法】leetcode ——45. 跳跃游戏 II(贪心策略)(C++版本)
- 129、【动态规划/贪心算法】leetcode ——53. 最大子数组和(C++版本)
- 126、【回溯算法】leetcode ——332. 重新安排行程:回溯算法(C++版本)
- 123、【回溯算法】leetcode ——491. 递增子序列:unordered_set去重和int数组去重(C++版本)
- 119、【回溯算法】leetcode ——131. 分割回文串:分割问题(C++版本)
- 116、【回溯算法】leetcode ——17. 电话号码的字母组合:回溯法:哈希映射+字符串数组映射(C++版本)
- 112、【树与二叉树】leetcode ——108. 将有序数组转换为二叉搜索树:二分查找树(C++版本)
- 89、【树与二叉树】leetcode ——101. 对称二叉树:后序递归+迭代法+层次遍历(C++版本)
- 82、【栈与队列】leetcode ——225. 用队列实现栈(C++版本)
- 65、【链表】leetcode——707. 设计链表(C++、Python版本)
- c++ inline内联函数
- C++求解一元一次方程——LeetCode 640