每天一道LeetCode-----将数值数组按一定顺序拼接,使得拼接的结果最大
生活随笔
收集整理的這篇文章主要介紹了
每天一道LeetCode-----将数值数组按一定顺序拼接,使得拼接的结果最大
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Largest Number
原題鏈接Largest Number
給定一個數值數組,將數組中的數值按照一定順序拼接在一起,使得拼接的結果值最大
思路:
- 將原數值數組轉為字符串數組,方便拼接和比較
- 將字符串數組排序
- 從頭到尾拼接結果
難點在如何對字符串數組排序,為了使結果最大,可以得知需要將數字打的排到前面,以圖片為例,
- 9的數字最大,所以排在第一位
- 隨后是5,排在第二位
- 對于3,30,34而言,通過比較可以看到34330這樣可以得到最大值
對于第三步,如何比較高位相等的一些數字呢(如3,30,34),如果以30和34為例,排序的結果無非是
- 30在34的前面
- 34在30的前面
這兩種,所以就把這兩種結果比較即可,即判斷3034和3430的大小關系從而確定30和34的先后位置
代碼如下
class Solution { public:string largestNumber(vector<int>& nums) {vector<string> strs(nums.size());auto it = nums.begin();/* 生成字符串數組 */std::generate(strs.begin(), strs.end(), [&it]{return std::to_string(*(it++));});/* 排序 */std::sort(strs.begin(), strs.end(), [](auto& lhs, auto& rhs){return lhs + rhs > rhs + lhs;});/* 拼接 */auto result = std::accumulate(strs.begin(), strs.end(), string(""), [](auto& res, auto& str) {return res + str;});/* 去除前綴0 */return (result.empty() || result.front() == '0') ? "0" : result;} };總結
以上是生活随笔為你收集整理的每天一道LeetCode-----将数值数组按一定顺序拼接,使得拼接的结果最大的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----计算n
- 下一篇: TCP/IP学习笔记(二)TCP三次握手