复杂问题简单化

把数组排成最小的数

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;
      }
全部评论

相关推荐

牛大宝儿236:还没入职就PUA,[发火我之前遇到一个月给500块钱的
点赞 评论 收藏
分享
吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务