zoukankan      html  css  js  c++  java
  • LeetCode31.下一个排列 JavaScript

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

    如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

    必须原地修改,只允许使用额外常数空间。

    以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
    1,2,3 → 1,3,2
    3,2,1 → 1,2,3
    1,1,5 → 1,5,1

    答案参考:

    /**
     * @param {number[]} nums
     * @return {void} Do not return anything, modify nums in-place instead.
     */
    var nextPermutation = function(nums) {
        for(var i = nums.length - 1; i > 0 && nums[i] <= nums[i - 1]; i--);
        if(i === 0){
            reverse(0, nums.length - 1);
            return;
        }
        for(var j = i + 1; j < nums.length && nums[i - 1] < nums[j]; j++);
        swap(i - 1, j - 1);
        reverse(i, nums.length - 1);
        return;    
        
        function reverse(start, end){
            while(start < end){
                swap(start, end);
                start++;
                end--;
            }
        }
        function swap(i, j){
            var tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }
    };
  • 相关阅读:
    各种数据库查询表及表信息的SQL
    多维表头的DataGridView
    SQLite入门笔记
    配置WCF的心得
    JS键盘的键码
    ASP.NET的URL过滤
    利用反射查看类成员
    一个简单的MVC示例
    一个日志类 LogUtil
    一个IniHelper
  • 原文地址:https://www.cnblogs.com/lhh520/p/10392708.html
Copyright © 2011-2022 走看看