• [leetcode] 46. 全排列(Java)


    46. 全排列

    这题我们可以借用31. 下一个排列写的nextPermutation函数来做,稍微改造一下即可

    注意要先给nums排个序

    class Solution {
        // 当没有下一个排列时return false
        public boolean nextPermutation(int[] nums) {
            if (nums.length == 1) {
                return false;
            }
            int p = -1;
            for (int i = nums.length - 2; i >= 0; i--) {
                if (nums[i] < nums[i + 1]) {
                    p = i;
                    break;
                }
            }
    
            if (p != -1) {
                int tmp = nums[p];
                int q = nums.length - 1;
                while (nums[q] <= tmp) {
                    q--;
                }
    
                nums[p] = nums[q];
                nums[q] = tmp;
    
                reverse(p + 1, nums);
            } else {
    //            reverse(0, nums);
                return false;
            }
    
            return true;
        }
    
    
        public void reverse(int k, int[] nums) {
            if (k >= nums.length) return;
            int i = k;
            int j = nums.length - 1;
            while (i < j) {
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
                i++;
                j--;
            }
        }
    
        public List<List<Integer>> permute(int[] nums) {
            Arrays.sort(nums);
            List<List<Integer>> ans = new ArrayList<>();
            do {
                List<Integer> tmp = new ArrayList<>();
                for (int num : nums) {
                    tmp.add(num);
                }
                ans.add(tmp);
            } while (nextPermutation(nums));
            return ans;
        }
    }
    
  • 相关阅读:
    日期时间插件
    QQ在线客服
    dede轮播图
    Animation 案例解释
    transition Css3过度详解
    解决文字无法缩小的问题
    DEDE函数
    hdu 3435 图回路分割
    HDU 4183
    hdu 1569 最小割
  • 原文地址:https://www.cnblogs.com/acbingo/p/9350290.html
Copyright © 2020-2023  润新知