[LeetCode]179. Largest Number
题目描述
解题思路
求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前
需要考虑的是对于不同位数的数之间的比较 9 < 35 ,但是9应该在35之前
解决方法:比较两个数的顺序,将两个数当做字符串,拼接后进行字符串比较即可
代码
#define MAX 15
bool cmp(const string& s1, const string& s2) {
return (s1 + s2) > (s2 + s1);
}
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> numbers;
vector<int>::iterator it;
for (it = nums.begin(); it != nums.end(); ++it) {
string numStr = numberToStr(*it);
numbers.push_back(numStr);
}
sort(numbers.begin(), numbers.end(), cmp);
string res = "";
vector<string>::iterator it2;
bool firstZero = (*numbers.begin() == "0");
for (it2 = numbers.begin(); it2 != numbers.end(); ++it2) {
if (firstZero && (*it2 == "0") && it2 + 1 != numbers.end())
continue;
firstZero = false;
res += *it2;
}
return res;
}
string numberToStr(int num) {
char bits[MAX];
int n = 0;
if (num == 0) {
n = 1;
bits[0] = '0';
bits[1] = '\0';
} else {
while (num != 0) {
bits[n++] = (num % 10) + '0';
num /= 10;
}
bits[n] = '\0';
}
for (int i = 0, j = n - 1; i < j; ++i, --j) {
char temp = bits[i];
bits[i] = bits[j];
bits[j] = temp;
}
return string(bits);
}
};