繁体   English   中英

最大数量。 给定一个非负整数列表,排列它们,使其形成最大数

[英]largest number. Given a list of non negative integers, arrange them such that they form the largest number

为什么此代码输出错误?

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

例如:

给定[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

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

有人可以纠正吗?

这就是我想到的。

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

问题是:

    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();

这应该使事情起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM