zoukankan      html  css  js  c++  java
  • 剑指Offer-39.把数组排成最小的数(C++/Java)

    题目:

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

    分析:

    将数组元素按照特定的规则从小到大排列,最后遍历数组拼接字符串即可,但重点是什么样的规则。

    在比较3和321的大小时,我们希望得到321小于3,这样拼接出来的数字3213是要小于3321,所以两个数字a和b比较大小时,将它们转换成字符串形式拼接成ab和ba来比较,ab小于ba则a小于b,根据这样的规则,将数组重新进行排序,最后拼接起来便是最小的数字了。

    程序:

    C++

    class Solution {
    public:
        string PrintMinNumber(vector<int> numbers) {
            if(numbers.size() == 0)
                return "";
            sort(numbers.begin(), numbers.end(), cmp);
            string res = "";
            for(auto i:numbers)
                res += to_string(i);
            return res;
        }
        static bool cmp(int a, int b){
            string strA = "" + to_string(a) + to_string(b);
            string strB = "" + to_string(b) + to_string(a);
            return strA < strB;
        }
    };

    Java

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    public class Solution {
        public String PrintMinNumber(int [] numbers) {
            String res = "";
            for(int i = 0; i < numbers.length; i++){
                list.add(numbers[i]);
            }
            Collections.sort(list,new Comparator<Integer>(){
                public int compare(Integer str1, Integer str2) {
                        String s1 = "" + str1 + str2;
                        String s2 = "" + str2 + str1;
                        return s1.compareTo(s2);
                    }
                });
            for(int j:list){
                res += j;
            }
            return res;
        }
        private ArrayList<Integer> list=new ArrayList<>();
    }
  • 相关阅读:
    List,Set,Map初级学习
    String,StringBuffer,StringBuilder 的使用
    activity跳转
    JSON与List之间的转换
    子线程更新UI
    数据库查询关键字显示所有结果
    Java数据类型转换1
    git 操作
    MySql导出表结构
    springBoot双数据源配置
  • 原文地址:https://www.cnblogs.com/silentteller/p/12055543.html
Copyright © 2011-2022 走看看