zoukankan      html  css  js  c++  java
  • 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());
        }
    };
    
  • 相关阅读:
    014.Nginx跨域配置
    013.Nginx动静分离
    附002.Nginx代理相关模块解析
    附001.Nginx location语法规则
    016.Nginx HTTPS
    015.Nginx重定向
    Blazor带我重玩前端(四)
    数据结构中的树(二叉树、二叉搜索树、AVL树)
    Flask前后端分离项目案例
    LeetCode-位运算相关题解
  • 原文地址:https://www.cnblogs.com/wallace-lai/p/13955387.html
Copyright © 2011-2022 走看看