zoukankan      html  css  js  c++  java
  • 将输入的数组排成最小的数

    题目描述:
      输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 
    输入:

    输入可能包含多个测试样例。
    对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。
    输入的第二行包括m个正整数,其中每个正整数不超过10000000。 

    输出:

    对应每个测试案例,
    输出m个数字能排成的最小数字。 

    样例输入:

    23 13 6
    23456 56

    样例输出:

    13236
    2345656
    public class MiniNumber {
    
        public static long getMiniNumber(int[] positiveInts)
        {
            if(positiveInts.length == 0){
                return 0;
            }
            if(positiveInts.length == 1){
                return positiveInts[0];
            }
            
            for(int i=positiveInts.length-1;i>0;i--){
                for(int j=i-1;j>=0;j--){
                    if(isBigger(positiveInts[j],positiveInts[i])){
                        int temp =positiveInts[i];
                        positiveInts[i] =positiveInts[j];
                        positiveInts[j] = temp;
                    }
                }
            }
            try{
                long result = positiveInts[0];
                for(int i=0;i<positiveInts.length-1;i++){
            //拼接结果集成long
                    result = (long)(result*Math.pow(10,(positiveInts[i+1]+"").length()))+positiveInts[i+1];
                }
                return result;
            }catch(Exception e){
                return -1;
            }
        }
    
        private static boolean isBigger(int x, int y) {
            //比较两个数字大小字典大小
            StringBuffer a = new StringBuffer().append(x);
            StringBuffer b = new StringBuffer().append(y);
            while(a.length() != b.length()){
                if(a.length()>b.length() && a.length()<b.length()*2){
                    b.append(b.substring(0,a.length()-b.length()));
                }else if(a.length()<b.length() && a.length()*2>b.length()){
                    a.append(a.substring(0,b.length()-a.length()));
                }else if(a.length()>=b.length()*2){
                    b.append(b);
                }else{
                    a.append(a);
                }
            }
            boolean result = false;
            for(int i=0;i<a.length();i++){
                if(a.charAt(i) < b.charAt(i)){
                    result = false;
                    break;
                }else if(a.charAt(i) > b.charAt(i)){
                    result = true;
                    break;
                }else{
                    continue;
                }
            }
            return result;
        }
    }
  • 相关阅读:
    Goland在go mod vendor模式下无法识别某些库
    国际教育游戏实证研究综述:2008年-2012年
    ES6之用let,const和用var来声明变量的区别
    集成spring boot + mysql + docker实战
    js sort方法根据数组中对象的某一个属性值进行排序(实用方法)
    小试牛刀之sort()排序的实现
    Redis字符串(STRING)中BIT相关命令
    koa,express,node 通用方法连接MySQL
    JavaScript预解释是一种毫无节操的机制
    [php]如何做到高并发优化
  • 原文地址:https://www.cnblogs.com/jing99/p/7427939.html
Copyright © 2011-2022 走看看