LeetCode-Largest Number-解题报告

来源:互联网 发布:分类信息网 软件 编辑:程序博客网 时间:2024/06/05 22:45

原题链接https://leetcode.com/problems/largest-number/

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.

给定数组,返回用数组中的数组合生成的最大的数。


我们只需要进行排序就行了,我使用的最简单的冒泡排序从小到大

排序前先将数组中的数转换成string,可以使用stringstream类


对于字符串a,b 

if(a+ b > b + a)return true;

else return false;

然后再将排好序的数组中的字符串逆序相加。

如果组装好的字符串的第一个字符为0,显然后面的全是0,直接返回“0”

<pre name="code" class="cpp">class Solution {public:    string largestNumber(vector<int>& nums) {vector<string>snum;stringstream ss;string str;if(nums.empty())return "";for (auto &a : nums){ss.clear();ss << a;getline(ss, str);snum.push_back(str);}for (int i = 0; i < snum.size(); ++i){for (int j = i + 1; j < snum.size(); ++j){if (cmp(snum[i], snum[j]))swap(snum[i], snum[j]);}}str = "";for (auto it = snum.rbegin(); it != snum.rend(); ++it)str += *it;    if(str[0] == '0')return "0";return str;}void swap(string& a, string& b){string t = a;a = b;b = t;}bool cmp(const string& a, const string& b){string t1 = a + b;string t2 = b + a;if (t1 > t2)return true;else return false;}};





0 0
原创粉丝点击