复杂问题简单化

把数组排成最小的数

http://www.nowcoder.com/questionTerminal/8fecd3f8ba334add803bf2a06af1b993

不想有多少排列组合,就想着当前数组中有两个数,怎么返回最小的数?
写一个compare方法比较就行
那么再往后想,三个数呢?先比较前两个,再拿前两个的结果与后面的数compare
但是大前提是数组是从小到大排列的,从小到大才能保证每一步都是当前最小
所以算法如下

  • 首先判空,任何题都要考虑传入空值,边界值等条件

  • 然后排序,取第一个作为结果

  • 然后依次拿第一个与第二个比较compare求组合的最小

  • 拿第一个与第二个求出的最小与第三个比较

  • ...

  • 一直到最后
    代码如下:

    public String PrintMinNumber(int [] numbers) {
          if (numbers == null || numbers.length == 0) {
              return "";
          }
          Arrays.sort(numbers);
          String result = String.valueOf(numbers[0]);
          for (int i=1; i<numbers.length; i++) {
              result = compareTwoNumbers(numbers[i] + result, result + "" + numbers[i]);
          }
          return result;
      }
    
      /**
       * 比较两个数的大小,返回较小的数
       */
      String compareTwoNumbers(String a, String b) {
          // 此处两个数长度肯定相等,因为是前后位置变换得到的两个数
          for (int i=0; i<a.length(); i++) {
              if (a.charAt(i) != b.charAt(i)) {
                  return a.charAt(i) < b.charAt(i) ? a : b;
              }
          }
          // 如果比较完之后都没有不相等的字符,就随便返回一个就行,因为两数相等
          return a;
      }
全部评论

相关推荐

2024-12-26 20:46
复旦大学 C++
国棉17厂丶小王:拿了offer的那个周末晚上去网吧通宵,去网吧不知道玩什么刷了lc的每日一题,然后试着第一次打开了三角洲行动,从此少了一个已经刷了700道题的lc用户,但是烽火地带多了一只🐭🐭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务