leetcode題庫——全排列
阿新 • • 發佈:2018-11-11
題目描述:
給定一個沒有重複數字的序列,返回其所有可能的全排列。
示例:
輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
方法:深搜
class Solution { public: vector<vector<int>> res; vector<int> flag; int length; vector<vector<int>> permute(vector<int>& nums) { if(nums.size()==0) return res; if(nums.size()==1) {flag.push_back(nums[0]);res.push_back(flag);return res;} length=nums.size(); int deep=0; dfs(nums,deep); return res; } void dfs(vector<int>& nums,int deep){ for(int i=0;i<length;i++){ int same=0; for(int j=0;j<flag.size();j++) if(nums[i]==flag[j]) {same=1;break;} if(same==0){ flag.push_back(nums[i]); dfs(nums,deep+1); flag.pop_back(); } } if(flag.size()==length) res.push_back(flag); } };
思路:
深搜時,設一個值same來標記已經記錄到flag中的值與當前搜尋到的值是否相等,如果相等,則跳過該值搜尋下一個值,若不等,則記錄進flag中,當flag長度為輸入的數字序列相同時,將flag送到res中。