2578. 最小和分割
给你一个正整数 num
,请你将它分割成两个非负整数 num1
和 num2
,满足:
num1
和num2
直接连起来,得到num
各数位的一个排列。- 换句话说,
num1
和num2
中所有数字出现的次数之和等于num
中所有数字出现的次数。
- 换句话说,
num1
和num2
可以包含前导 0 。
请你返回 num1
和 num2
可以得到的和的 最小 值。
注意:
num
保证没有前导 0 。num1
和num2
中数位顺序可以与num
中数位顺序不同。
示例 1:
输入:num = 4325 输出:59 解释:我们可以将 4325 分割成num1 = 24 和 num2 = 35 ,和为 59 ,59 是最小和。
示例 2:
输入:num = 687 输出:75 解释:我们可以将 687 分割成 num1 = 68 和 num2 = 7, 和为最优值 75 。提示:
10 <= num <= 109
题解:
- 从用例中可以看出,num1 和 num2分别是单调递增的,这样数据才会最小。
- 当 num1 和 num2 位数不相等时,我们需要补上前导零使得它们位数相等。
- num1和 num2 的位数差不能超过 1。
因此,我们就可以得出最小和的分割方法:
- 将 num的数字进行递增排序;
- 按照递增顺序,交替地将数字分配给 num1和 num2
code:
class Solution {public int splitNum(int num) {char[] arr = String.valueOf(num).toCharArray();Arrays.sort(arr);int num1 = 0, num2 = 0;for (int i = 0; i < arr.length; i++) {if (i % 2 == 0) {num1 = num1 * 10 + (arr[i] - '0');} else {num2 = num2 * 10 + (arr[i] - '0');}}return num1 + num2;}
}