
순열 중 내림차 순이 되는 포인트를 찾는다.(digits[i] <= digits[i + 1])
포인트보다 큰 수가 있다면 자리를 바꿔 최소 내림차 순을 만든다.
내림차 순을 뒤집어 큰 수가 뒷자리로 가게 해 가장 작은 수를 찾는다.
function nextGreaterElement(n: number): number {
const digits = String(n).split('').map(Number)
const len = digits.length
let i = len - 2
while(i >= 0 && digits[i] >= digits[i + 1]) {
i--
}
if(i < 0) return -1
let j = len - 1
while(digits[j] <= digits[i]) {
j--
}
[digits[i], digits[j]] = [digits[j], digits[i]]
let left = i + 1
let right = len - 1
while(left < right) {
[digits[left], digits[right]] = [digits[right], digits[left]]
left++
right--
}
const result = Number(digits.join(''))
return result <= 2 ** 31 - 1 ? result : -1
};