Largest Number
这个题就是定义一个新的比较整型数大小的方法,没有想到string的比较,第一次写的代码不完整,有错误,测试用例为[121,12]时可测出错误。在这儿贴出代码仅仅是记录一下自己当时的思路:
class Solution {
public:
static void pushinvector(vector<int>&vec,int num_t)
{
if(num_t==0) //容易漏掉这个特殊情况
{
vec.push_back(0);
return ;
}
while(num_t!=0)
{
vec.push_back(num_t%10);
num_t/=10;
}
}
static bool compare(const int& num1,const int& num2)
{
vector<int> vec1,vec2;
pushinvector(vec1,num1);
pushinvector(vec2,num2);
size_t i=vec1.size()-1;
size_t j=vec2.size()-1;
size_t i_size=i;
size_t j_size=j;
while(i>0&&j>0)
{
if(vec1[i]==vec2[j])
{
i--;j--;
}
else
{
return (vec1[i]>vec2[j]);
}
}
if(i==0&&j==0)
{
return (vec1[i]>vec2[j]);
}
else if(i==0&&j>0) //在这种情况下的比较不完整,但是会发现写的代码非常啰嗦,不简洁
{
if(vec1[i]==vec2[j])
{
return (vec2[j-1]<vec2[j_size]);
}
else
{
return (vec1[i]>vec2[j]);
}
}
else
{
if(vec1[i]==vec2[j])
{
return (vec1[i-1]>vec1[i_size]);
}
else
{
return (vec1[i]>vec2[j]);
}
}
}
string largestNumber(vector<int> &num) {
string str;
sort(num.begin(),num.end(),compare);
if (num[0]==0)
{
return "0";
}
int vec_size=num.size();
for(int i=0;i<vec_size;i++)
{
str+=to_string((unsigned long long)num[i]);
}
return str;
}
};
比较函数采用string进行比较的话,将会异常简单,代码如下:
class Solution {
public:
static bool compare(const string& str1,const string& str2)
{
return (str1+str2)>(str2+str1);
}
string largestNumber(vector<int> &num) {
vector<string> str_vector;
string str;
int size=num.size();
for(int i=0;i<size;i++)
{
str_vector.push_back(to_string((unsigned long long)num[i]));
}
sort(str_vector.begin(),str_vector.end(),compare);
if(str_vector[0]=="0")
return "0";
for(int i=0;i<size;i++)
{
str+=str_vector[i];
}
return str;
}
};

浙公网安备 33010602011771号