Leetcode: Largest Number

Given a list of non negative integers, arrange them such that they form the largest number.

leetcode上的一道给定一个整形数组然后求其怎样进行组合才能得到一个最大的值,由于可能太大,会导致溢出,要求返回string类型而非整形。下面是我的刚开始的想法:
拿例题来说,给定一个数组[3,30,34,5,9],求其能组成的最大数值。很自然的想法就是将最大的值排在最靠前的位置,然后依次将第二大、第三大在后面排序即可。问题是由于各个数是多少位不能确定。后来又想先将数组中的每个整形转换为字符串之后进行左对齐,然后按照最左边的首先进行排序,在左边排完序之后根据从左往右数的第二位进行降序排序。但是这样也会出现一个小问题,就是比如一个是3,另一个是30和34.左对齐之后是如表格所示:在左边位数相同的情况下,第二位缺省的要比第二位有数字的要排在靠前的位置,这种做法比较麻烦。
3 
34
30
后参考http://www.cnblogs.com/easonliu/p/4221810.html 这篇博客中的做法,觉得比自己的做法要好,代码copy过来,留以后方便查看。
<pre name="code" class="cpp"><span style="font-family:Times New Roman;font-size:14px;">bool cmp(const string s1, const string s2) {
    return (s1 + s2) > (s2 + s1);
}
class Solution {
public:
    string largestNumber(vector<int> &num) {
        vector<string> s_num(num.size());
        stringstream stream;
        for (int i = 0; i < num.size(); ++i){
            stream << num[i];//将整形输入至流
            stream >> s_num[i];//将流输出至string的vector中。
            stream.clear();
        }
        sort(s_num.begin(), s_num.end(), cmp);
        string res;
        bool flag = false;
        for ( int i = 0; i < s_num.size(); ++i){
            <span style="white-space:pre">	</span>if (s_num[i] != "0"){
                <span style="white-space:pre">	</span>res += s_num[i];
                <span style="white-space:pre">	</span>flag = true; 
		}
		else if (flag)
			res += s_num[i];		
		if (!flag) res.push_back('0');
		return res;
	}
};</span>


 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值