给你一个正整数 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 可以包含前导零,并且两者数位顺序可以和 num 不同。
所以可以直接用贪心的思想来解决。
将 0 尽可能放 num1 和 num2 前面,越是小的数位尽可能放 num1 和 num2 前面。
尽可能保证 num1 和 num2 的长度一致。
class Solution { public int splitNum(int num) { String str = String.valueOf(num); char[] arr = str.toCharArray(); Arrays.sort(arr); int num1 = 0; int num2 = 0; boolean ju = true; for (char c : arr) { int m = c - '0'; if (ju) { num1 *= 10; num1 += m; ju = false; } else { num2 *= 10; num2 += m; ju = true; } } return num1 + num2; } }
