4,12——179

刚开始的想法,是觉得这题没法直接得出每个数字的具体“大小”,我的做法是:

1 ——> (1111111111,1)
234 ——> (234444444,4)

 

然后直接在nums对元组中的第一个元素用sort,在样例中卡住了,最后换了题解。

本题两个关键点:

  1. 直接比较两个数字相连的结果,确定其排序(没想到)
  2. 在python和Java中的sort方法中传入比较方法。(get)
    1. python2 
      compare = lambda x, y: 1 if x+y > y+X else -1
      nums.sort(com = compare)
    2. python3
      import functools
      # 将nums中的每个元素映射成str,再转化成list
      numsStr = list(map(str, nums))
      compare = lambda x,y: 1 if x+y<y+x else -1
      numsStr.sort(key = functools.cpm_to_key(compare))
      res=''.join(nums_str)
      if res[0]=='0':
          res='0'
      return res
    3. Java
          int n = nums.length;
          String numsToWord[] = new String[n];
          for(int i=0;i<n;i++){
              numsToWord[i] = String.valueOf(nums[i]);
          }
          //compareTo()方法比较的时候是按照ASCII码逐位比较的
          //通过比较(a+b)和(b+a)的大小,就可以判断出a,b两个字符串谁应该在前面
          //所以[3,30,34]排序后变为[34,3,30]
          //[233,23333]排序后变为[23333,233]
          Arrays.sort(
              numsToWord,(a,b)->{
                  return (b+a).compareTo(a+b);
              }
          ); 
          if(numsToWord[0] == "0"){
              return "0";
          }
          StringBuilder sb = new StringBuilder();
          for(int i=0;i<n;i++){
                  sb.append(numsToWord[i]);
              }
          return sb.toString();
上一篇:leetcode 179 最大数


下一篇:leetcode——179.最大数