好,今天的第二题,正好和上一道题是接着的
大体思路
刚开始以为以为只要nums[i]和nums[n]相等,就不做交换这样做就可以。但是后来想到每次交换完顺序都会变乱,所以这种方法行不通。然后又想了另一种方法,就是每次交换的时候判断在当前顺序中是不是已经交换过,既在i到j-1范围内没有和nums[j]相等的数,那么就交换,否则continue
class Solution { public: /* * @param nums: A list of integers. * @return: A list of permutations. */ vector<vector<int>> permuteUnique(vector<int> &nums) { // write your code here vector<vector<int>> so; fullarrange(nums, nums.size(), 0, so); return so; } void swap(int &a, int &b){ int t = a; a = b; b = t; } void fullarrange(vector<int> &nums, int size, int n, vector<vector<int>> &so){ if(n == size){ so.push_back(nums); return; } for(int i=n; i<size; i++){ if(find(nums, n, i, nums[i])) continue; else{ swap(nums[i], nums[n]); fullarrange(nums, size, n+1, so); swap(nums[i], nums[n]); } } } bool find(vector<int> &nums, int st, int ed, int target){ for(int i=st; i<ed; i++) if(nums[i] == target) return true; return false; } };
题目链接: https://www.lintcode.com/problem/permutations-ii/description
[lintCode] -- Permutations II
猜你喜欢
转载自blog.csdn.net/qq_24889575/article/details/81877445
今日推荐
周排行