描述
给定一个32位整数n,用同样的数字组成新的32位整数,使得它要比n大,返回最小的这样的数。如果不存在这样的整数,返回-1。
样例
- 样例 1:
输入: 12
输出: 21
- 样例 2:
输入: 21
输出: -1
解析
nextGreaterElement = function (n) {
function check(source, sort){
for(let i = 0; i < source.length; i++){
if(source[i] != sort[i]){
return true;
}
}
return false;
}
function buildString(str){
let strArray = str.split(''),
firstChar = strArray.shift(),
sortArray = [...strArray].sort((a, b)=> a > b ? -1 : 1),
res = '';
if(!check(strArray, sortArray)){
for(let i = 0; i <= sortArray.length; i++){
if(sortArray[i] <= firstChar || i == sortArray.length){
res += sortArray[i - 1];
sortArray.splice(i - 1, 1, firstChar);
break;
}
}
sortArray.sort((a, b)=> a > b ? 1 : -1);
return res + sortArray.join('');
}
return firstChar + buildString(strArray.join(''));
}
let nToString = n.toString().split(''),
sortSet = [...nToString].sort((a, b)=> a > b ? -1 : 1);
if(check(nToString, sortSet)){
let num = buildString(nToString.join('')) - 0;
return num > Math.pow(2, 31) - 1 ? -1 : num;
}
return -1;
}