• 把数组排成最小的数


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

    思路:当把数字拼接起来后,可能会超出整数的上限,此时,我们可以将数字转换成字符串来处理。

    第一种方法是:我们可以利用字符串的全排列的思想来做这道题,找到最小的数字。

    第二种方法是: 我们重新定义一个比较器,让比较器比较(mn与nm)的大小。在此题中,我们假设m=3,n=32,则我们想要的是mn与nm中的较小值。假如我们按这个排序,就可以得出排序后的数组,再转换为字符串即可。

    public String PrintMinNumber(int [] numbers) {
            if(numbers.length==0) return "";
            String[] str = new String[numbers.length];
            for(int i=0;i<numbers.length;i++){
                str[i] = String.valueOf(numbers[i]);
            }
            getResult(str,0,numbers.length-1);
            return min;
        }
        String min = "";
        public  String getResult(String[] str,int st,int length){
            
            if(st == length){
                String newStr ="";
                for(int i=0;i<=length;i++){
                    newStr+=str[i];
                }
                if(min.equals("")) min = newStr;
                else{
                    if(min.compareTo(newStr)>0) min = newStr;
                }
            }else{
                for(int i=0;i<=length;i++){
                    swap(str,st,i);
                    getResult(str,st+1,length);
                    swap(str,st,i);
                }
            }
            return min;
        }
        public void swap(String[] str,int i,int j){
            String ss = str[j];
            str[j] = str[i];
            str[i] = ss;
        }

    第二种思路:

    public String PrintMinNumber(int [] numbers) {
            if(numbers.length==0) return "";
            String[] str = new String[numbers.length];
            for(int i=0;i<str.length;i++){
                str[i] = String.valueOf(numbers[i]);
            }
            Arrays.sort(str,new cmp());
            String cc = "";
            for(int i=0;i<str.length;i++){
                cc+=str[i];
            }
            return cc;
        }
        class cmp implements Comparator<String>{
            public int compare(String o1,String o2){
                return (o1+o2).compareTo(o2+o1);
            }
        }
  • 相关阅读:
    Mac sublime text3 安装插件
    趣题记录
    Shadow DOM及自定义标签
    JavaScript 对象部署 Iterator 接口
    JavaScript实现循环链表
    使用JavaScript实现单向链表
    nodejs深入浅出读书笔记(三)
    nodejs深入浅出读书笔记(一)
    nodejs深入浅出读书笔记(二)
    为什么要了解Event loop?(二)
  • 原文地址:https://www.cnblogs.com/yingpu/p/5826245.html
Copyright © 2020-2023  润新知