Create a function that takes a positive integer and returns the next bigger number that can be formed by rearranging its digits. For example:
12 ==> 21
513 ==> 531
2017 ==> 2071
nextBigger(num: 12)// returns 21
nextBigger(num: 513)// returns 531
nextBigger(num: 2017)// returns 2071
If the digits can't be rearranged to form a bigger number, return -1
(or nil
in Swift):
9 ==> -1
111 ==> -1
531 ==> -1
nextBigger(num: 9)// returns nil
nextBigger(num: 111)// returns nil
nextBigger(num: 531)// returns nil
또 못풀었습니다...
function nextBigger(n){
console.log(n);
var chars = n.toString().split('');
var i = chars.length-1;
while(i > 0) {
if (chars[i]>chars[i-1]) break;
i--;
}
if (i == 0) return -1;
var suf = chars.splice(i).sort();
var t = chars[chars.length-1];
for (i = 0; i < suf.length; ++i) {
if (suf[i] > t) break;
}
chars[chars.length-1] = suf[i]
suf[i] = t;
var res = chars.concat(suf);
var num = parseInt(res.join(''));
console.log("->" +num);
return num;
}
index
배열 변경을 시작할 인덱스
deleteCount (Optional)
배열에서 제거할 요소의 수
item1, item2, ... (Optional)
배열에 추가할 요소
주목해야할 점은 제거하는 요소를 반환하고, 원래의 배열은 해당 요소가 제거한 모습으로 변경된다.
var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
var removed = myFish.splice(3, 1);
// removed is ["mandarin"]
// myFish is ["angel", "clown", "drum", "sturgeon"]
문자열을 배열로 변환한다.
뒤에서부터 앞자리수가 뒷자리수보다 작은 경우의 뒷자릿수 index를 반환한다.
ex) [2, 0, 7, 1]이면, 0 > 7 이므로, index = 2
만약 전부 앞자리수가 뒷자리수보다 크다면, 해당 숫자가 만들 수 있는 케이스 중에 가장 큰 것이기 때문에 이것보다 큰 숫자는 없으므로 -1을 반환한다.
ex) '7210' → return -1
그 외의 경우에서는
suf
에 해당하는 인덱스부터 끝까지의 배열을 오름차순 순으로 정렬한 후 저장한다. 원래 chars
변수에는 suf
에 해당되는 값을 제외한 배열로 변한다.
ex) suf = [7, 1].sort() = [1,7], char = [2,0]
t
에는 chars
변수의 마지막 값이 저장된다.
ex) t = 0
suf
의 아이템을 순서대로 돌면서 t
보다 큰 값이 있으면 for문을 나간다.
ex) i = 0, ( suf[0] = 1 ) > ( t = 0 ), → break
chars
의 마지막 요소에 suf[i]를, suf[i]에는 t를 대입한다.
ex) chars = [2, 1], suf = [0, 7]
chars
랑 suf
를 합친 후, 문자열로 변환한다.
ex) [2, 1, 0, 7] → '2107'