1. 程式人生 > >[LeetCode] 127. Word Ladder

[LeetCode] 127. Word Ladder

題目

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 中的數 組合生成一個字串,字串最大。

解題思路

兩步:

  1. 將nums 排序。
  2. 將新排序的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