LeetCode:Largest Number

来源:互联网 发布:作曲软件哪个好 编辑:程序博客网 时间:2024/05/16 19:14

179. 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.

思路:

初步想法是先对数组进行排序,使得排序后相连接的数字最大。我采用最简单的冒泡排序,这里的关键是如何比较两个数,那个应该放在前面(即那个数大)。

比较两数大小步骤:

1:分别计算整数m,n的前后组合的字符串mn和nm。如m= 123, n= 456,则mn= 123456, nm= 456123。

2:比较组合后的mn和nm,那个数大。由于mn和nm有可能太大,超出int的范围,故,我采用按位比较字符串字符大小的方法,从前往后,依次比较把每一位大小。

连接数字成为字符串:

1:两数字转换为字符串,我使用C++中的streanstream。stringstream ss;ss << nums[i];。

2:连接字符串,str += ss.str();。

附上代码:

class Solution {public:    bool Comp(int m, int n){stringstream ssm;ssm << m;stringstream ssn;ssn << n;string smn = ssm.str() + ssn.str();string snm = ssn.str() + ssm.str();stringstream ssmn(smn);stringstream ssnm(snm);int newmn, newnm;ssmn >> newmn;ssnm >> newnm;int cnt = smn.length();for(int i = 0; i < cnt; i ++){if(smn[i] > snm[i])return true;else if(smn[i] < snm[i])return false;}return true;}void BubbleSort(vector<int>& nums){int n =  nums.size();for(int i = n - 1; i > 0; i --){for(int j = 0; j < i; j ++){if(!Comp(nums[j], nums[j + 1])){int tmp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = tmp;}}}}string largestNumber(vector<int>& nums) {BubbleSort(nums);int n = nums.size();string str = "";for(int i = 0; i < n; i ++){stringstream ss;ss << nums[i];if(str != "" || ss.str() != "0" || i == n - 1)str += ss.str();}return str;}};


0 0
原创粉丝点击