[Leetcode] 31. Next Permutation โ
Problem โ
์์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋์ดํ์๋ ์ฃผ์ด์ง nums
์ ๋ค์๋ฒ์ ๋์ฌ ์์ด์ ๊ตฌํ๋ ๋ฌธ์
Solution โ
๋ค์์ผ๋ก ํฐ ์์ด์ ๊ตฌํ๊ธฐ์ํด์๋ ๊ฐ์ฅ ์์ ๋จ์์์ ์ซ์๋ฅผ ๋ณ๊ฒฝํ๊ณ ๊ทธ ๋ค์ ์ซ์๋ค์ ์ค๋ฆ์ฐจ์ํ๋ ๋ฐฉ๋ฒ์ด์๋ค.
- ๊ฐ์ฅ ์์ ๋จ์์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ซ์๋ฅผ ์ฐพ๋๋ค. ์ด์ ๋ ์์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐฐ์นํ๊ณ ์์๋ฅผ ํ์ธํด๋ณด๋ฉด ์ ์ ์๋ค.
left
์ธ๋ฑ์ค์ ์์น๋ฅผ ์ฐพ์๋ค๋ฉด,left
์ ์ค๋ฅธ์ชฝ ๋ฐฐ์ด์ ๊ฐ์์ ๋ณด๋ค ํฐ ์๋ฅผ ์ฐพ์swap
ํ๋ค.- ๋ง์ง๋ง์ผ๋ก
left
์ ์ค๋ฅธ์ชฝ์ ๊ฐ์๋คreverse
ํด์ฃผ๋ฉด๋๋ค.
std::next_permutation ๋ด๋ถ๊ตฌํ โ
- a[k] < a[k+1]์ธ k์ค max์ธ k๋ฅผ ์ฐพ๋๋ค.
- a[k]๋ณด๋ค ํฐ ๊ฐ๋ค ์ค m์ด ๊ฐ์ฅ ํฐ m์ ์ฐพ๋๋ค.
- a[k]์ a[m]์ swap ํ๋ค.
- a[k+1]๋ถํฐ a[n:์ ์ฒด ์ฌ์ด์ฆ]๊น์ง ๋ฐฐ์ด์ reverseํ๋ค.
JS Code โ
js
/**
* @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())
};
์ฐธ๊ณ