LC.P2578[最小和分割] 方法一:排序+贪心1234567891011class Solution { public int splitNum(int num) { char[] s = Integer.toString(num).toCharArray(); Arrays.sort(s); int[] ans = new int[2]; for (int i = 0; i < s.length; ++i) { ans[i & 1] = ans[i & 1] * 10 + (s[i] - '0'); } return ans[0] + ans[1]; }} 时间复杂度:$O(nlogn)$ 空间复杂度:$O(n)$ 方法二:计数+贪心123456789101112131415161718class Solution { public int splitNum(int num) { int[] cnt = new int[10]; int n = 0; while (num > 0) { ++cnt[num % 10]; num /= 10; ++n; } int[] ans = new int[2]; for (int i = 0, j = 0; i < n; ++i) { while (cnt[j] == 0) ++j; --cnt[j]; ans[i & 1] = ans[i & 1] * 10 + j; } return ans[0] + ans[1]; }} 时间复杂度:$O(n)$ 空间复杂度:$O(C)$,其中$C = 10$