LeetCode OJ: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 is 9534330.

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

这题也是属于那种算法很重要的那种题目,一开始拿到题目我头都大了,想想怎么样才能够正确的分析出来哪个比哪个大种种情况,后来实在想不出来,看了下别人写的,原来可以是暴力

一点,直接对每个组合组成的数字进行比较(当然是两个两个数字之间),然后排个序,直接相加得到的就是最大的数了。代码如下,实现比较容易:

 1 class Solution {
 2 public:
 3     string largestNumber(vector<int>& nums) {
 4         stringstream ss;
 5         vector<string> numStr;
 6         numStr.clear();
 7         ss.str("");
 8         int sz = nums.size();
 9         for(int i = 0; i < sz; ++i){
10             ss << nums[i];
11             numStr.push_back(ss.str());
12             ss.str(""); //清空ss
13         }
14         sort(numStr.begin(), numStr.end(), Compare);
15         string ret = "";
16         for(int i = 0; i < sz; ++i){
17             ret += numStr[i];
18         }
19         if(ret[0] == '0')
20             ret = "0";
21         return ret;
22     }
23 
24     static bool Compare(string s1, string s2)
25     {
26         string res1 = s1 + s2;
27         string res2 = s2 + s1;
28         return res1 > res2;
29     }
30 };

 java版本的如下所示,由于String的处理比较方便,可以直接的将Int型转换成一个String,Comparator对象使用起来也较为容易,代码如下所示:

 1 public class Solution {
 2     public String largestNumber(int[] nums) {
 3         int sz = nums.length;
 4         String [] numStr = new String[sz];
 5         for(int i = 0; i < sz; ++i){
 6             numStr[i] = String.valueOf(nums[i]);
 7         }
 8         Arrays.sort(numStr, new Comparator<String>(){ //这里就不用单独的去创造一个函数对象了,直接new一个使用就可以了
 9             public int compare(String s1, String s2){
10                 String tmp1 = s1+s2;
11                 String tmp2 = s2+s1;
12                 return tmp2.compareTo(tmp1);
13             }
14         });
15         String ret = new String("");
16         for(int i = 0; i < sz; ++i){
17             ret += numStr[i];
18         }
19         if(ret.charAt(0) == '0')
20             ret = "0";
21         return ret;
22     }
23 }

 

posted @ 2015-10-22 21:05  eversliver  阅读(348)  评论(0编辑  收藏  举报