最大数量。给定一个非负整数列表,将它们排列成最大的数字

时间:2018-07-03 04:25:25

标签: c++

为什么这段代码输出错误?

问题:给定一个非负整数列表,将它们排列为最大数。

例如:

给出[3,30,34,5,9],最大的形成数是9534330。

注意:结果可能非常大,因此您需要返回一个字符串而不是整数。

这是我的代码:

bool compareinterval(int x,int y);
string Solution::largestNumber(const vector<int> &A) 
{
    //sort(A.begin(),A.end());
    vector< int>B;
    int i,x=0;
    for(i=0;i<A.size();i++)
       B.push_back(A[i]);
    sort(B.begin(),B.end(),compareinterval);
    vector<string> vect;

string result;

    for(i=0;i<B.size();i++)
    {

      ostringstream convert;
    convert<<B[i];
    if(B[i]!=0)
       x=1;

    string str1=convert.str();
        result.append(str1);
    }
   if(x==0)
      return "0";
    else
     return result;

}
bool compareinterval(int x,int y)
{
    ostringstream convert;
    string result;
    convert<<x;
    string str1=convert.str();
     //ostringstream convert;
    //string result;
   // ostringstream convert;
    convert<<y;
    string str2=convert.str();
    int i;




    for(i=0;i<min(str1.length(),str2.length());i++)
    {
        if((str1[i]-'0')<(str2[i]-'0'))  
           return false;
         if((str1[i]-'0')>(str2[i]-'0'))  
           return true;


    }
    //return true;
    if(str1.length()<str2.length())
       return true;
else
    return false;



}

这是输入和输出:

input:A : [ 9, 99, 999, 9999, 9998 ]
my output:999899999999

我定义了不能正常工作的比较功能。

有人可以纠正吗?

2 个答案:

答案 0 :(得分:1)

这就是我要想到的。

  1. 将所有输入转换为字符串-10转换为“ 10”
  2. 使用std::sort以降序排列字符串。您可以使用自定义比较方法,也可以使用strcmp
  3. 现在只需连接重新排列的字符串即可。

答案 1 :(得分:0)

问题是:

    convert<<x;
    string str1=convert.str();

    convert<<y;
    string str2=convert.str();

您要将第二个整数附加到第一个整数。例如,如果x为9,y为8,str1将为9,str2将为98。这不是您想要的。 而是使用单独的变量(或在重用之前重置字符串流)

    convert1<<x;
    string str1=convert1.str();

    convert2<<y;
    string str2=convert2.str();

这应该使事情正常。