LeetCode系列46—全排列
題意
給定一個沒有重複數字的序列,返回其所有可能的全排列。
問題分析
方法一:回溯+標記陣列used
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
vector<int> combine;
vector<int> used(nums.size());
fill(used.begin(), used.end(), 0);
dfs(res, nums, used, combine, 0);
return res;
}
void dfs(vector<vector<int>>& res, vector<int> nums, vector<int>& used, vector<int>& combine, int k){
if(k == nums.size()){
res.push_back(combine);
return;
}
for(int i = 0; i < nums.size(); i++){
if(used[i] == 0){
used[i] = 1;
combine.push_back(nums[i]);
dfs(res, nums, used, combine, k+1);
used[i] = 0;
combine.pop_back();
}
}
}
};
方法二:回溯+交換
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> output = new ArrayList<Integer>();
for (int num : nums) {
output.add(num);
}
int n = nums.length;
backtrack(n, output, res, 0);
return res;
}
public void backtrack(int n, List<Integer> output, List<List<Integer>> res, int first) {
// 所有數都填完了
if (first == n) {
res.add(new ArrayList<Integer>(output));
}
for (int i = first; i < n; i++) {
// 動態維護陣列
Collections.swap(output, first, i);
// 繼續遞迴填下一個數
backtrack(n, output, res, first + 1);
// 撤銷操作
Collections.swap(output, first, i);
}
}
}
相關文章
- Leetcode——46. 全排列LeetCode
- 【LeetCode】46. 全排列LeetCode
- LeetCode 45跳躍遊戲&46全排列LeetCode遊戲
- LeetCode46 回溯演算法求全排列,這次是真全排列LeetCode演算法
- leetcode:全排列(java回溯)LeetCodeJava
- LeetCode-046-全排列LeetCode
- Day 28 | 491.遞增子序列 、46.全排列、 47.全排列 II
- LeetCode-047-全排列 IILeetCode
- 程式碼隨想錄演算法訓練營day29 | leetcode 491. 非遞減子序列、46. 全排列、47. 全排列 II演算法LeetCode
- 【leetcode】60. Permutation Sequence 全排列的第k位序的排列形式LeetCode
- 字串全排列字串
- 下一個排列(LeetCode)LeetCode
- LeetCode 567. 字串的排列LeetCode字串
- LeetCode-441-排列硬幣LeetCode
- 全排列演算法演算法
- 演算法——全排列演算法
- LeetCode31.下一個排列LeetCode
- 遞迴-*全排列問題遞迴
- 【Algorithm】全排列演算法Go演算法
- JavaScript陣列元素全排列JavaScript陣列
- LeetCode 1470. 重新排列陣列LeetCode陣列
- LeetCode 31. 下一個排列 | PythonLeetCodePython
- 全排列及相關擴充套件演算法(二)——求字典序下一組排列及全排列演算法套件演算法
- js陣列全排列問題JS陣列
- 有重複元素的全排列
- 藍橋杯全排列專題
- 位右移 字母大小寫全排列
- LeetCode每日一題: 排列硬幣(No.441)LeetCode每日一題
- 遞迴解決全排列問題遞迴
- 全排列價值(數學問題)
- 從基礎講全排列(Java實現)Java
- Python語言的全排列怎麼提速?Python
- LeetCode刷題進階之重新排列字串(1528)LeetCode字串
- 藍橋杯之帶分數(全排列+暴力)
- 前端電商 sku 的全排列演算法前端演算法
- 回溯法解決全排列問題總結
- leetcode Sum系列LeetCode
- 2014省賽---六角填數(填空)(全排列)