码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-30 23:20:24      阅读:224      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!