46. Permutations

来源:互联网 发布:在淘宝上搜血滴子 编辑:程序博客网 时间:2024/05/29 14:10

1刷
想到不用想肯定比第一次写得更好,31, 46, 47这3题完全搞定全排序!!!

class Solution {public:    vector<int> nextPermutation(vector<int>& nums){        int k = -1;        for(int i = nums.size() - 2; i >= 0; -- i)            if(nums[i] < nums[i + 1]){                k = i;                break;            }        if(k == -1){            reverse(nums.begin(), nums.end());            return nums;        }        int t = -1;        for(int i = nums.size() - 1; i > k; -- i)            if(nums[i] > nums[k]){                t = i;                break;            }        swap(nums[k], nums[t]);        reverse(nums.begin() + k + 1, nums.end());        return nums;    }    vector<vector<int>> permute(vector<int>& nums) {        vector<vector<int>>ve;        int n = nums.size();        int sum = 1;        for(int i = 1; i <= n; ++ i) sum = sum * i;        ve.push_back(nums);        while(--sum) ve.push_back(nextPermutation(nums));        return ve;    }};

2刷
为了做47题,重新学习了原来的方法,总觉得47最后一个案例卡next这个方法的时间!!!!

class Solution {public:    void getit(vector<int>& nums, int now, int n, vector<vector<int>>& ve){        if(now == n){            ve.push_back(nums);            return ;        }        for(int i = now; i <= n; ++ i){            swap(nums[i], nums[now]);            getit(nums, now + 1, n, ve);            swap(nums[i], nums[now]);        }    }    vector<vector<int>> permute(vector<int>& nums) {        vector<vector<int>>ve;        getit(nums, 0, nums.size() - 1, ve);        return ve;    }};
0 0