Largest Number Total Accepted: 5791 Total Submissions: 39124
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.
https://oj.leetcode.com/problems/largest-number/
分析:题目实质是让重新定义一个符合特殊要求的比较函数
class Solution {
public:
string largestNumber(vector<int> &num) {
//sort
int j = 1;
string ss;
int ssm=0;
//只有一个元素,直接返回
if (num.size() == 1){
return to_string(num[0]);
}
vector<int>::iterator iterr = num.begin();
//插入排序,从大到小
for (; j < num.size(); j++)
{
int key = num[j];
int i = j - 1;
while (i >= 0 && (!Compare(num[i], key)))
{
num[i + 1] = num[i];
i--;
}
num[i + 1] = key;
}
//将元素组合成字符串输出。如果元素全为零,则直接输出“0”
while (iterr != num.end()){
ssm=ssm+(*iterr);
ss = ss + to_string(*iterr);
iterr++;
}
if(ssm==0){
return "0";
}else{
return ss;
}
}
//重新定义比较函数
bool Compare(int int1, int int2){
if (int1 == int2){
return true;
}
vector<int> num1;
//将int1按位拆解,置于vector中,个,十,百,千等顺序,用于比较
num1.push_back(int1 % 10);
while (int1 / 10){
int1 = int1 / 10;
num1.push_back(int1 % 10);
}
vector<int> num2;
num2.push_back(int2 % 10);
while (int2 / 10){
int2 = int2 / 10;
num2.push_back(int2 % 10);
}
vector<int>::iterator iter1 = num1.end();
vector<int>::iterator iter2 = num2.end();
iter1--;
iter2--;
//从最高位开始比较,如果该位不等,则返回结果;如果相等,等降低至下一位。
//如果一个迭代器到头了,为了继续比较,将到头的迭代器重新归位
while (*iter1 == *iter2){
if (iter1 == num1.begin()){
iter1 = num1.end();
iter1--;
iter2--;
}
else if (iter2 == num2.begin()){
iter2 = num2.end();
iter2--;
iter1--;
}
else{
iter1--;
iter2--;
}
}
if (*iter1>*iter2){
return true;
}
else{
return false;
}
}
};