Next Permutation(Leetcode 31)

记住方法就可以,找到第一个nums[i] < nums[i+1] 的位置 i
然后从i+1往后扫,找到第一个小于nums[i]的位置 j,
最后swap(nums[i], nums[j-1]), 然后将 i 后面排序

重点是判断时一定都要加等于号。

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        if(nums.size() <= 1) return;
        int i=nums.size()-1;
        while(i > 0 && nums[i] <= nums[i-1]) i--;
        if(i == 0){
            reverse(nums.begin(), nums.end());
            return;
        }
        i--;
        int j = i+1;
        for(; j<nums.size(); j++){
            if(nums[j] <= nums[i]) break;
        }
        j--;
        swap(nums[i], nums[j]);
        sort(nums.begin()+i+1, nums.end());
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,768评论 0 33
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,214评论 0 52
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,271评论 0 2
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,742评论 0 15
  • 转载自:https://egoistk.github.io/2016/09/10/Java%E6%8E%92%E5...
    chad_it阅读 1,005评论 0 18