[lintcode]最大數 Largest Number
阿新 • • 發佈:2019-01-30
給出一組非負整數,重新排列他們的順序把他們組成一個最大的整數。
想法是,排序陣列中的數,但需要重新定義排序的比較函式。
對於兩個數a、b,分別拼接成ab和ba,以這兩個數的大小定義排序大小。
使用sprintf函式將數字轉換成字串。
將兩個數字拼接是大小會超過int,需要使用long long。
拼接之後需要去掉前導零。
class Solution { public: /** *@param num: A list of non negative integers *@return: A string */ static bool cmp(int a, int b){ char sa[100],sb[100]; sprintf(sa,"%d",a); sprintf(sb,"%d",b); int lena = strlen(sa); int lenb = strlen(sb); long long ta = a*(long long)pow(10, lenb) + b; long long tb = b*(long long)pow(10, lena) + a; return ta > tb; } string largestNumber(vector<int> &num) { // write your code here sort(num.begin(), num.end(), cmp); char str[100]; string ans = ""; for(int i = 0; i < num.size(); i++){ sprintf(str,"%d",num[i]); //return ans; if(ans == "0" && str[0] == '0') //return str; continue; ans += str; } return ans; } };