当前位置:  首页>> 技术小册>> 数据结构与算法(下)

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

例如输入数组 [3, 32, 321],则打印出这3个数字能排成的最小数字321323

解法

  1. import java.util.Arrays;
  2. /**
  3. * @author bingo
  4. * @since 2018/12/8
  5. */
  6. class Solution {
  7. /**
  8. * 打印数组元素组成的最小的数字
  9. *
  10. * @param nums 数组
  11. * @return 最小的数字
  12. */
  13. public String printMinNumber(int[] nums) {
  14. if (nums == null || nums.length == 0) {
  15. return "";
  16. }
  17. int n = nums.length;
  18. String[] strNums = new String[n];
  19. for (int i = 0; i < n; ++i) {
  20. strNums[i] = String.valueOf(nums[i]);
  21. }
  22. Arrays.sort(strNums, (o1, o2) -> (o1 + o2).compareTo(o2 + o1));
  23. StringBuilder sb = new StringBuilder();
  24. for (String str : strNums) {
  25. sb.append(str);
  26. }
  27. return sb.toString();
  28. }
  29. }

测试用例

  1. 功能测试(输入的数组中有多个数字;输入的数组中的数字有重复的数位;输入的数组中只有一个数字);
  2. 特殊输入测试(表示数组的指针为空指针)。

该分类下的相关小册推荐: