一、题目内容

image.png

二、题解

解法1:

思路

image.png

代码

  1. class Solution {
  2. /**
  3. * 拼接字符串 x + y > y + xx+y>y+x ,则 xx “大于” yy ;
  4. * 反之,若 x + y < y + xx+y<y+x ,则 xx “小于” yy ;
  5. *
  6. * @param nums
  7. * @return
  8. */
  9. public String minNumber(int[] nums) {
  10. String[] strs = new String[nums.length];
  11. for (int i = 0; i < nums.length; i++) {
  12. strs[i] = String.valueOf(nums[i]);
  13. }
  14. quickSort(strs, 0, strs.length - 1);
  15. StringBuilder res = new StringBuilder();
  16. for (String s : strs) {
  17. res.append(s);
  18. }
  19. return res.toString();
  20. }
  21. /**
  22. * 快排
  23. *
  24. * @param strs
  25. * @param left
  26. * @param right
  27. */
  28. public void quickSort(String[] strs, int left, int right) {
  29. if (left >= right) {
  30. return;
  31. }
  32. int i = left, j = right;
  33. String tmp = strs[i];
  34. while (i < j) {
  35. //有序移动
  36. while ((strs[j] + strs[left]).compareTo(strs[left] + strs[j]) >= 0 && i < j) {
  37. j--;
  38. }
  39. //有序移动
  40. while ((strs[i] + strs[left]).compareTo(strs[left] + strs[i]) <= 0 && i < j) {
  41. i++;
  42. }
  43. //不满足递增条件交换
  44. tmp = strs[i];
  45. strs[i] = strs[j];
  46. strs[j] = tmp;
  47. }
  48. strs[i] = strs[left];
  49. strs[left] = tmp;
  50. quickSort(strs, left, i - 1);
  51. quickSort(strs, i + 1, right);
  52. }
  53. }