Следующий код - мое решение для Largest Number. Однако он потерпит крах.Что случилось с strcmp и c_str() здесь?
Если я непосредственно сравнить tampa
и tempb
в cmp()
с помощью tempa > tempb
вместо strcmp()
, это нормально. Так что тут не так?
#include <iostream>
#include <string>
#include <stack>
#include <vector>
#include <climits>
#include <cstdio>
#include <algorithm>
#include <sstream>
#include <cstring>
using namespace std;
bool cmp(string a, string b) {
string tempa = a + b;
string tempb = b + a;
int res = strcmp(tempa.c_str(), tempb.c_str());
if (res < 0) {
return false;
} else return true;
}
class Solution {
public:
string largestNumber(vector<int>& nums) {
vector<string> str;
string res = "0";
if (nums.empty()) {
return res;
}
for (int i = 0; i < nums.size(); ++i) {
stringstream ss;
ss << nums[i];
str.push_back(ss.str());
}
sort(str.begin(), str.end(), cmp);
res = "";
for (int i = 0; i < str.size(); ++i) {
res += str[i];
}
return res[0] == '0' ? "0" : res;
}
};
int main()
{
Solution sol;
int data[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
vector<int> nums(data, data + sizeof(data)/sizeof(data[0]));
string res = sol.largestNumber(nums);
cout << res << endl;
return 0;
}
Большое спасибо! Вот и все. Я не знал, что 'cmp' должен быть нерефлексивным раньше. Для этой проблемы сравнение здесь ОК, потому что, учитывая два целых числа «12» и «123», я хочу рассказать, что представляет собой наибольшая конкатенация «12123» или «12312». – tamlok