php网站搭建环境搭建,wordpress子站点用户无角色,织梦网站搬家工具,关于做好网站建设的通知给你一个正整数 num #xff0c;请你将它分割成两个非负整数 num1 和 num2 #xff0c;满足#xff1a;
num1 和 num2 直接连起来#xff0c;得到 num 各数位的一个排列。 换句话说#xff0c;num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。num1…
给你一个正整数 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;}
}