46. 全排列
給定一個不含重復數字的數組?nums
?,返回其?所有可能的全排列?。你可以?按任意順序?返回答案。
//抄的
class Solution {
private:vector<vector<int>>result;vector<int> path;
public:void backtracking(vector<int>& nums,vector<bool>&used){if(path.size()==nums.size()){result.push_back(path);return;}for(int i=0;i<nums.size();i++){if (used[i] == true) continue;used[i] = true;path.push_back(nums[i]);backtracking(nums, used);path.pop_back();used[i] = false;}}vector<vector<int>> permute(vector<int>& nums) {vector<bool>used(nums.size(), false);backtracking(nums,used);return result;}
};
回溯算法
主要還是依托于遞歸,再遞歸中循環判斷,實現多層的窮舉
這里傳遞一個bool數組used用于判斷在此次枚舉中數字是否用過,終止條件是當前記錄的路徑長度是否等于原數組長度,回溯處理需要彈出path末尾元素并重置used對應元素。