zoukankan      html  css  js  c++  java
  • 【CodeWars】Next bigger number with the same digits

    参考:https://www.geeksforgeeks.org/find-next-greater-number-set-digits/

    const given_number = 320235484882472;
    // 大脑理解就是4变成6然后+479(4、7、9组合成的最小数字)
    // 算法理解就是从右到左找,找到第一个可以被替换的数字->4。
    // 7>6,7不行。9>7,9不行。4<9,4可以
    
    // 找到[9,7,6]里面最小的数字6
    // 交换4和6。就固定好了最高位536
    // 剩下的数字排序,结果就是最小的数字479
    
    const nextBigger=(number)=>{
        const arr=(number+'').split('').map((item)=>Number(item));
        const len=arr.length;
        const tempArr=[];
        const map={};
        const result=[];
       
        // 从右到左,找到需要被交换的数字
        for(var i=len-1;i>=0;i--){
            tempArr.push(arr[i]);
            if((i!=len-1)&&(arr[i]<arr[i+1])){
                map.replacedNum=arr[i];
                map.replacedIndex=i;
                break;
            }
        }
    
        if(map.replacedNum===undefined){
            return -1
        }
    
        // 找到和他交换的大数字,通过计算得到这个数字在原数组中的index
        tempArr.pop();
        tempArr.reverse();
    
        map.biggerNum=tempArr[0];
        tempArr.forEach((item,index)=>{
            if((item>map.replacedNum)&&(item <= map.biggerNum)){
                map.biggerNum=item;
                map.biggerNumIndex=index;
            }
        });
        map.biggerNumIndex= map.biggerNumIndex+map.replacedIndex+1;
        console.log(tempArr)
    
        // 交换
        arr.forEach((item,index)=>{
            if(index===map.replacedIndex){
                result.push(map.biggerNum);
            }else if(index===map.biggerNumIndex){
                result.push(map.replacedNum);
            }else{
                result.push(item)
            }
        });
    
        arr.splice(map.biggerNumIndex,1,map.replacedNum)
        // replacedIndex之后的数字全部重新排序,排成最小的数字就行
        const newNumArr=arr.slice(map.replacedIndex+1).sort();
        result.splice(map.replacedIndex+1);
        return Number(result.concat(newNumArr).join(''));
    
    }
    
    const res=nextBigger(given_number);
    console.log(res)
    
  • 相关阅读:
    策略模式(Strategy)
    java.lang.reflect.Method
    java.lang.reflect.Constructor
    快速导航
    Java反射机制(Reflection)
    java.lang.Class
    java.lang.reflect.Field
    java常用类 --- Object
    vuex:弄懂mapState、mapGetters、mapMutations、mapActions
    超详细MySQL安装及基本使用教程
  • 原文地址:https://www.cnblogs.com/hikki-station/p/15420071.html
Copyright © 2011-2022 走看看