순열을 오름차순으로 나열했을때 주어진 nums
의 다음번에 나올 순열을 구하는 문제
다음으로 큰 순열을 구하기위해서는 가장 작은 단위에서 숫자를 변경하고 그 뒤의 숫자들을 오름차순하는 방법이있다.
left
인덱스의 위치를 찾았다면, left
의 오른쪽 배열의 값에서 보다 큰 수를 찾아 swap
한다.left
의 오른쪽의 값을들 reverse
해주면된다./**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var nextPermutation = function(nums) {
const swap = (arr, a, b) => [ arr[a], arr[b] ] = [ arr[b], arr[a] ]
let i = nums.length -2
while(0 <= i && nums[i] >= nums[i+1]) i--
if (0 <= i) {
let j = nums.length-1
while(nums[i] >= nums[j]) j--
swap(nums, i, j)
}
nums.push(...nums.splice(i+1).reverse())
};
참고