給定一組非負整數 nums,重新排列每個數的順序(每個數不可拆分)使之組成乙個最大的整數。
注意:輸出結果可能非常大,所以你需要返回乙個字串而不是整數。
示例 1:
輸入:nums = [10,2]
輸出:"210"
示例 2:
輸入:nums = [3,30,34,5,9]
輸出:"9534330"
示例 3:
輸入:nums = [1]
輸出:"1"
示例 4:
輸入:nums = [10]
輸出:"10"
剛看到這題的想法是,找數字的優先順序,然後從小往大排,比如34,3誰應該排在後面,一開始認為是從數字的個位開始遍歷,34的個位為4,3的個位為3,那麼3應該排在34的後面,形成了343,甚至滿足前面4個示例,比如示例2,[3,30,34,5,9] 按個位比較後得到[30,3,34,5,9],那麼從小到大排我們得到
"9<-5<-34<-3<-30",與答案符合,但是最後發現這並不是所有的最佳解,還是會有特殊情況,並不滿足這個排序條件。
正確解法應該是先合併,後考慮誰大,最後再排序。
將nums數字裡面的類容轉化成字串然後放進變數型別為string的str陣列裡。
使用sort的快排加上自定義函式,利用string的特性去讓它自己判斷大小,比如34和3,會直接比較343和334,343比較大,然後來排序。
最後是考慮,假如陣列裡全是0的話,那麼我會得到"000...",所以判斷,假如陣列第一位是0的話,意味著後面都是0,那麼我們直接返回"0"。
class solution
public:
string largestnumber(vector& nums)
sort(str.begin(),str.end(),cmp);
string res ="";
for(auto x : str)
return res[0] == '0'? "0" : res;
}};
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...