LintCode 1174. 下一个更大的元素 III JavaScript算法

描述

给定一个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;
}


运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/SmallTeddy/article/details/108635784