【问题标题】:largest number. Given a list of non negative integers, arrange them such that they form the largest number数量最多。给定一个非负整数列表,将它们排列成最大的数
【发布时间】:2018-07-03 04:25:25
【问题描述】:

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

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

例如:

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

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

有人可以改正吗?

【问题讨论】:

  • 你试过调试你的代码吗? ericlippert.com/2014/03/05/how-to-debug-small-programs
  • convert&lt;&lt;x; convert&lt;&lt;y;您是否验证了它的工作方式是否符合您的要求?
  • @Superman 给出的算法无疑是一个更可取的算法,应该对您有所帮助,但您的问题是为什么您的代码不起作用。换句话说,“请为我调试我的代码”,这通常被认为与 SO 无关。
  • @goyalsaransh002 !我认为帖子上的示例不正确。 [3, 30, 34, 5, 9] -> 9534330 对吗? 9534303 不是吗?
  • @Alexander 9534330 明显大于 9534303。

标签: c++


【解决方案1】:

这就是我想到的。

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

【讨论】:

    【解决方案2】:

    问题是:

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

    这应该会让事情顺利进行。

    【讨论】:

      猜你喜欢
      • 2021-10-18
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多