首页 > 编程语言 > 详细

面试题33_把数组排成最小的数

时间:2015-07-30 23:17:33      阅读:248      评论:0      收藏:0      [点我收藏+]

题目描述

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


解题思路

这道题是一个排序问题,但是要自定义排序规则。

需要注意的问题是:拼接起来的数可能超出整型数的表示范围,因此这也是一个大数问题。

用字符串来表示解决溢出问题。


实现代码

<span style="font-size:18px;">
class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
        
        string ret;
        ret.clear();
        if(numbers.empty())
            return ret;
        
        string numToStr;
        int len = numbers.size();
        vector<string> vStr;
        
        for(int i=0; i< len ;i++)
        {
        	stringstream sst;//定义string流对象
            sst<<numbers[i];//这里注意 流写入符号 "<<" 也就是标准输出符号,在这里是用来向
			//流对象写入数据

        	vStr.push_back(sst.str());    
        }
        
        sort(vStr.begin(), vStr.end(),compare);
        
        for(int i=0; i<len; i++)
            ret.append(vStr[i]);
        
        return ret;
    }
    
    static bool compare(const string &str1, const string &str2)
    {
    	return (str1+str2) < (str2+str1);//注意小于号,代表从小到大排序,大于号则相反    
    }
      
};

</span>


面试题33_把数组排成最小的数

原文:http://blog.csdn.net/tommyzht/article/details/47158879

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!