复杂问题简单化

把数组排成最小的数

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

相关推荐

不愿透露姓名的神秘牛友
07-09 12:20
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 12:31
以前小时候我最痛恨出轨、偷情的人,无论男女,为什么会出轨?现在我成了自己最讨厌的人,没想到分享的东西在牛客会被这么多人看,大家的评价都很中肯,我也认同,想过一一回复,但我还是收声了,我想我应该说说这件事,这件事一直压在我心里,是个很大的心结,上面说了人为什么出轨,我大概能明白了。我们大一下半年开始恋爱,开始恋爱,我给出了我铭记3年的承诺,我对她好一辈子,我永远不会背叛,我责任心太重,我觉得跟了我,我就要照顾她一辈子,我们在一起3年我都没有碰过她,她说往东我就往东,她说什么我做什么,她要我干什么,我就干什么!在学校很美好,中途也出过一些小插曲,比如男闺蜜、男闺蜜2号等等等。但我都强迫她改掉了,我...
牛客刘北:两个缺爱的人是没有办法好好在一起的,但世界上哪有什么是非对错?你后悔你们在一起了,但是刚刚在一起的美好也是真的呀,因为其他人的出现,你开始想要了最开始的自己,你的确对不起自己,21岁的你望高物远,你完全可以不谈恋爱,去过你想要的生活,你向往自由,在一起之后,你要想的不是一个人,而是两个人,你不是变心了,就像你说的,你受够了,你不想包容了,冷静几天是你最优的选择,爱人先爱己。
社会教会你的第一课
点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
投了多少份简历才上岸
点赞 评论 收藏
分享
点赞 评论 收藏
分享
合不合适,我自己说了才算
码农索隆:hr:“真执着啊,来我公司当法人吧”
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务