标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。