给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 1:
输入: [10,2]
输出: 210示例 2:
输入: [3,30,34,5,9]
输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
数字可能很大,直接转成string,然后根据是否(a+b)>(b+a)定义先后序,排序后拼起来就是最大数。
注意全0的边界输入,此时应输出“0”,而不是多个“0”。
class Solution {
public:
bool static cmp(string a, string b){
return (a+b)>(b+a); //当a+b>b+a时a排在b前面
}
string largestNumber(vector<int>& nums) {
int flag=0;
vector<string> v;
for(vector<int>::iterator i=nums.begin();i<nums.end();i++) {
v.push_back(to_string(*i));
if(*i) flag=1;
}
if(!flag) return "0";
sort(v.begin(), v.end(), cmp); //没有生成实例就要调用,故cmp应声明为static
string s="";
for(int i=0;i<v.size();i++) s=s+v[i];
return s;
}
};
本地codeblocks没配置好C++11,C++98情况下需手写to_string。。
//C++ char转string真麻烦。。
string to_string(int a){
string s="";
while(a){
char c=a%10+'0';
stringstream stream; stream << c; string str = stream.str();
s=str+s;
a/=10;
}
return s;
}
Update: 2020/4/22
to_string更好的写法:
template <typename T>
std::string to_string(T value)
{
std::ostringstream os ;
os << value ;
return os.str() ;
}