VUE+Elementui實現複選框的多選與全選
阿新 • • 發佈:2021-10-28
leetcode31.下一個排列
題目
實現獲取 下一個排列 的函式,演算法需要將給定數字序列重新排列成字典序中下一個更大的排列(即,組合出下一個更大的整數)。
如果不存在下一個更大的排列,則將數字重新排列成最小的排列(即升序排列)。
必須 原地 修改,只允許使用額外常數空間。
用例
輸入:nums = [1,2,3]
輸出:[1,3,2]
輸入:nums = [3,2,1]
輸出:[1,2,3]
輸入:nums = [3,2,1]
輸出:[1,2,3]
輸入:nums = [1]
輸出:[1]
求解
/** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ var nextPermutation = function(nums) { let len = nums.length; let flag = false; if(len==1){ return nums; } for(let i=len -2;i>=0;i--){ let min_index = null //找出比i大的且最小的 for(let j=len-1;j>i;j--){ if(nums[j]>nums[i]){ if(min_index==null){ min_index=j }else{ if(nums[j]<nums[min_index]){ min_index=j } } } } //說明已經存在 if(min_index!=null){ //對第i個和第min_index進行交換 let temp = nums[i] nums[i]=nums[min_index] nums[min_index]=temp //對i+1到len-1進行反轉 let left = i+1 let right = len-1 while (left < right) { // i 右邊的數進行翻轉,使得變大的幅度小一些 [nums[left], nums[right]] = [nums[right], nums[left]]; left++; right--; } flag=true break; } } //如果flag==false,則返回最小的,使用排序 if(flag == false){ nums.sort(function(a, b){return a - b}); } return nums; };