ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

leetcode 179 最大数

2021-11-07 16:05:39  阅读:193  来源: 互联网

标签:string 最大数 la shortlength longStr tempStr 179 leetcode shortStr


其实就是比较两个数的字符表示拼在一起哪个大,然后用这种判别原则去维护一个大顶堆。本来写了好几十行的判断代码,后来发现可以直接判断a+b和b+a的大小关系,感觉自己像个小丑。贴代码

 1 class Solution {
 2 public:
 3     string largestNumber(vector<int>& nums) 
 4     {
 5         //自定义大顶堆比较规则
 6         auto cmp = [](const string a, const string b) -> bool 
 7         { 
 8             return (a+b)<(b+a);
 9             /*if(a[0]!=b[0])
10             return a[0]<b[0];
11             else
12             {
13                 int i = 0;
14                 int la = a.length();
15                 int lb = b.length();
16                 while(a[i] == b[i] && i<la && i<lb)
17                 i++;
18                 //完全相同
19                 if(i == la && i == lb)
20                 {
21                     return a[i-1]<b[i-1];
22                 }
23                 //某一位开始存在不同
24                 else if(i<la && i<lb)
25                 {
26                     return a[i]<b[i];
27                 }
28                 //位数不同,且某一字符串为另一字符串前一部分
29                 else if(i>=la || i>=lb)
30                 {
31                     string longStr;
32                     string shortStr;
33                     int longLength;
34                     int shortlength;
35                     if(i>=la)
36                     {
37                         longStr = b;
38                         shortStr = a;
39                         longLength = lb;
40                         shortlength = la;
41                     }
42                     else 
43                     {
44                         longStr = a;
45                         shortStr = b;
46                         longLength = la;
47                         shortlength = lb;                       
48                     }
49                     int k = 0;
50                     //找不同
51                     while(longStr[i] == shortStr[k] && i<longLength)
52                     {
53                         i++;
54                         k++;
55                         if(k == shortlength)
56                         k = 0;
57                     }
58                     //长数组未越界
59                     if(i<longLength)
60                     {
61                         if(longStr == a)
62                         return a[i]<b[k];
63                         else
64                         return a[k]<b[i];
65                     }
66                     else
67                     return la<lb;
68                 }
69             }
70             return false;*/ 
71         };
72         priority_queue<string,vector<string>,decltype(cmp)> q(cmp);
73         string res;
74         string tempStr;
75         for(auto tempNum:nums)
76         {
77             tempStr = to_string(tempNum);
78             q.push(tempStr);
79         }
80         if(q.top() == "0")
81         {
82             res = "0";
83             return res;
84         }
85         while(!q.empty())
86         {
87             //cout<<q.top()<<endl;
88             res+=q.top();
89             q.pop();
90         }
91         return res;
92     }
93 };

 

标签:string,最大数,la,shortlength,longStr,tempStr,179,leetcode,shortStr
来源: https://www.cnblogs.com/zhaohhhh/p/15520145.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有