• 19 把数组排成最小的数


    0 引言

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

    1 抽象问题具体化

    举例1:输入数组{3,32,321},打印出这三个数字能排成的最小数字.

      1. 3与32相比,332 > 323,故32排在3的前边,得到序列32,3;

      2. 321与3相比,3321 > 3213,故321排在3的前边;321与32相比,32321 > 32132,321排在32的前边,得到序列321,32,3;

      3. 打印序列321323.

    2 具体问题抽象分析

      1. 定义排序规则:将两个数用字符串的形式拼接起来,比较大小之后,返回结果.

      2. 将所有数拼接起来,输出即可.

      3. 为了便于对数中的每个数字单独处理,将数转成字符串.

    3 demo

        // 排序规则,默认str1在str2的后面;返回true时,交换二者顺序;
        bool compareNums(string str1, string str2){        
            long num1 = stol(str1 + str2);
            long num2 = stol(str2 + str1);
            if( num1 > num2)
                return false;
            else
                return true;
        }
        string PrintMinNumber(vector<int> numbers) {
            for(int i=1;i < numbers.size();i++){
                for(int j=i;j>0;j--){
                    if(compareNums(to_string(numbers[j]),to_string(numbers[j-1]))){
                        int temp = numbers[j];
                        numbers[j] = numbers[j-1];
                        numbers[j-1] = temp;
                    }
                }
            }
            string myString = "";
            for(int i=0;i<numbers.size();i++)
                myString += to_string(numbers[i]);
            return myString;
        }

    4 代码优化

  • 相关阅读:
    python BUGGGGGGGGGG
    Golang channel底层原理及 select 和range 操作channel用法
    Go reflect包用法和理解
    Golang 之sync包应用
    Golang 之 sync.Pool揭秘
    深入理解字节码文件
    java中的回调,监听器,观察者
    范式
    BIO,NIO,AIO总结(二)
    anaconda命令行运行过程中出现的错误
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/10111393.html
Copyright © 2020-2023  润新知