[LeetCode] 127. Word Ladder
阿新 • • 發佈:2018-12-10
題目
Given a list of non negative integers, arrange them such that they form the largest number.
*Example 1:
Input: [10,2]
Output: "210"
Example 2:
Input: [3,30,34,5,9]
Output: "9534330"
Note: The result may be very large, so you need to return a string instead of an integer.
思路
題目大意
將 nums 中的數 組合生成一個字串,字串最大。
解題思路
兩步:
- 將nums 排序。
- 將新排序的nums,組成一個字串。
這裡主要的難點在 排序。 兩種方法: 1.將 str_a,str_b 。組合生成新的直接比較。 2.利用數學關係式,生成結果。
code
1.將 str_a,str_b 。組合生成新的直接比較。
class Solution {
public String largestNumber(int[] nums) {
if(nums == null || nums.length == 0)
return null;
String[] str = new String [nums.length];
for(int i = 0 ;i < nums.length;i++){
str[i] = String.valueOf(nums[i]);
}
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String leftRight = o1 + o2;
String rightLeft = o2 + o1;
return -leftRight.compareTo(rightLeft);
}
});
StringBuffer sb = new StringBuffer();
for(String s:str){
sb.append(s);
}
while(sb.charAt(0) == '0' && sb.length() > 1 )
sb.deleteCharAt(0);
return sb.toString();
}
}
import functools
def cmpele(a, b):
stra = str(a)
strb = str(b)
stra_len = len(stra)
strb_len = len(strb)
max_len = max(stra_len, strb_len)
i = 0
while i < max_len:
if i < stra_len:
sa = int(stra[i])
elif i == stra_len:
sa = max(int(stra[0]), int(stra[i-1]))
if i < strb_len:
sb = int(strb[i])
elif i == strb_len:
sb = max(int(strb[0]), int(strb[i-1]))
if sa > sb:
return -1
elif sa < sb:
return 1
i += 1
return 0
class Solution:
def largestNumber(self, nums):
"""
:type nums: List[int]
:rtype: str
"""
nums = sorted(nums,key=functools.cmp_to_key(cmpele))
res = ""
for ele in nums:
res += str(ele)
while len(res) > 1 and res[0] == '0':
res = res[1:]
return res