• LeetCode 46 全排列


    LeetCode 46 全排列

    https://leetcode-cn.com/problems/permutations/

    因为题目明确说明没有重复数字并且有了LeetCode 31的铺垫,这道题也就成了easy级别的题目了。同样地,我们可以使用标准库和手写排列生成算法两种方式来解题。当然了,也可以参照力扣题解,使用回溯法来解题,但这里就不写回溯法的代码了。

    使用标准库

    class Solution {
    public:
        vector<vector<int>> permute(vector<int>& nums) {
            vector<vector<int>> ans;
    
            sort(nums.begin(), nums.end());
            do { ans.push_back(nums); } 
            while (next_permutation(nums.begin(), nums.end()));
    
            return ans;
        }
    };
    

    手写排列生成算法

    注意到,n个不同数的全排的个数共有n!个,所以我们需要调用n!次生成下一个排列的方法才能将所有的排列生成完全。

    class Solution {
    public:
        vector<vector<int>> permute(vector<int>& nums) {
            int sz = nums.size();
    
            // n个不同的数的排列个数有n!个
            unsigned long long total = 1;
            for (int i = 1; i <= sz; ++i) {
                total *= i;
            }
    
            vector<vector<int>> ans;
            sort(nums.begin(), nums.end());
            while (total--) {
                ans.push_back(nums);
                nextPermutation(nums);
            }
            return ans;
        }
    
        void nextPermutation(vector<int>& nums) {
            int sz = nums.size();
    
            int i, j;
            for (i = sz - 2; i >= 0; --i) {
                if (nums[i] < nums[i + 1]) {
                    break;
                }
            }
            if (i >= 0) {
                for (j = sz - 1; j > i; --j) {
                    if (nums[j] > nums[i]) {
                        break;
                    }
                }
                swap(nums[i], nums[j]);
            }
    
            reverse(nums.begin() + i + 1, nums.end());
        }
    };
    
  • 相关阅读:
    (4.3)ODBC/OLE DB/ADO概念与使用情况
    查找至少连续出现三次的所有数字/连续3天的日期【LeetCode】
    javascript 事件触发
    document.referrer
    创业公司
    关于javascript 回调函数
    promise
    javascript deferred
    document.readystate
    window---->load, document------DOMContentLoaded
  • 原文地址:https://www.cnblogs.com/wallace-lai/p/13955387.html
Copyright © 2020-2023  润新知