剑指Offer-把数组排成最小的数

描述:

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如:输入数组 {3,32,321},则打印出这三个数字能排成的最小数字为 321323。

分析:

这里需要找到排列中数值最小的字符串,那么应该将原数组进行排序处理,将数组中的每个数字看成字符串,在比较两个字符串 S1 和 S2 的大小时, 应该比较的是 S1+S2 和 S2+S1 的大小,如果 S1+S2 < S2+S1,那么应该把 S1 排在前面,否则应该把 S2 排在前面。两两比较,交换位置即可。
例如:

  • 第一步:{3,32,321}
  • 第二步:332>323,则将3和32两两交换位置,则得到{32,3,321}
  • 第三步:32321>32132,则将32和321两两交换位置,则得到{321,3,32}
  • 第四步:数组中的第一个位置已经确定了,接下来进行第二个位置,同理得到{321,32,3},此时循环结束,得到了我们要的数组。

最后,将数组拼接成字符串即可得到结果。

代码实现:

public  String PrintMinNumber(int[] numbers){
        int n = numbers.length;
      //循环数组,按照规则对数组进行排序处理
        for (int i=0;iInteger.parseInt(s21)){
                    int t=numbers[i];
                    numbers[i]=numbers[j];
                    numbers[j]=t;
                }
            }

        }
      //使用StringBuilder拼接字符串,提高效率
        StringBuilder sb = new StringBuilder();
        for (int i:numbers){
            System.out.println(i);
            sb.append(i);
        }
        return sb.toString();

    }

题目链接

你可能感兴趣的:(剑指Offer-把数组排成最小的数)