179. Largest Number

description:

 179  22.9%Medium

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

For example, given [3, 30, 34, 5, 9], the largest formed number is9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

my solution:

bool myfunction(int i, int j) {
	char x[100];
	char y[100];
	sprintf(x, "%d", i);
	sprintf(y, "%d", j);
	string X = x;
	string Y = y;
	if (X + Y > Y + X) return true;
	else return false;
}
class Solution {
public:
	string largestNumber(vector<int>& nums) {
		char temp[100];
		string result;
		sort(nums.begin(), nums.end(), myfunction);
		for(int i=0;i<nums.size();i++) {
            sprintf(temp,"%d",nums[i]);
            result+=temp;
        }
        if (nums[0] == 0)result = "0";
		return result;
	}
};
thought:

首先对所有数字进行排序,排序的规则是(x和y,如果xy组合大于yx组合,则x>y),然后就可以从头到尾把元素组合在一起得到结果。

重点是要想到,这道题考察的是一种排序,一开始我没找到方向,无从下手,后来发现制定规则后,无论数字长度为多少,只要他在规则中是大于别的元素的就放在最前面。

没考虑到的地方是对0值的处理,也算是程序健壮性和维护的一部分,这方面我一直比较弱。

别的有待改进的地方就是,对于C++轮子的应用,to_string函数之前没想到,用的sprint,还要用char*与string进行转换,可以说是很麻烦了。

Better ways:

by isaac7

class Solution {
public:
    string largestNumber(vector<int> &num) {
        vector<string> arr;
        for(auto i:num)
            arr.push_back(to_string(i));
        sort(begin(arr), end(arr), [](string &s1, string &s2){ return s1+s2>s2+s1; });
        string res;
        for(auto s:arr)
            res+=s;
        while(res[0]=='0' && res.length()>1)
            res.erase(0,1);
        return  res;
    }
};












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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值