面试题45:把数组排成最小的数

题目

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

解题思路

找到一个排序规则可以比较两个数字,也就是给定两个数字m和n,需要确定一个规则判断m和n哪个应该排在前面,而不是仅仅比较这两个数字的值哪个更大。

  1. 若能把两个数字m和n拼接成数字mn和nm。如果mn
  2. 若把数字m和n拼接在一起,会存在一个数据类型溢出的问题,所以应该把数字转换成字符串,通过字符串的方式进行比较。

代码

  1. 此时用到的数字转字符串的函数to_string()是c++11特有的,故在linux环境下编译时,应该是g++ -g -c PrintMinNumber.cpp -std=c++11 -o a.o的命令
  2. 时刻注意代码的鲁棒性
  3. 用vector容器存放字符串数组,也就是定义string类型的vector容器,函数的返回类型也是string类型。
string PrintMinNumber(vector number,int length)
{
    if(number.empty() || length < 0)
    {
        return 0;
    }
    vector num_string;
    for(int i = 0;i num_string[j]+num_string[i])
            {
                string string_temp ;
                string_temp      = num_string[i];
                num_string[i]    = num_string[j];
                num_string[j]    = string_temp;
            }
        }
    }
    string string_num;
    for(int i = 0;i

完整代码见GitHub

你可能感兴趣的:(面试题45:把数组排成最小的数)