【力扣2160】拆分数位后四位数字的最小和
一.题目描述
给你一个四位 正 整数 num
。请你使用 num
中的 数位 ,将 num
拆成两个新的整数 new1
和 new2
。new1
和 new2
中可以有 前导 0 ,且 num
中 所有 数位都必须使用。
- 比方说,给你
num = 2932
,你拥有的数位包括:两个2
,一个9
和一个3
。一些可能的[new1, new2]
数对为[22, 93]
,[23, 92]
,[223, 9]
和[2, 329]
。
请你返回可以得到的 new1
和 new2
的 最小 和
示例 1 :
输入:num = 2932
输出:52
解释:可行的 [new1, new2] 数对为 [29, 23] ,[223, 9] 等等。
最小和为数对 [29, 23] 的和:29 + 23 = 52 。
示例 2 :
输入:num = 4009
输出:13
解释:可行的 [new1, new2] 数对为 [0, 49] ,[490, 0] 等等。
最小和为数对 [4, 9] 的和:4 + 9 = 13 。
提示:
1000 <= num <= 9999
二.题目分析
注意,num肯定是一个4位数字。使用贪心算法:
- 肯定是两个2位数字之和最小
- 对于每个两位数字,肯定是第一位的越小越好
所以,取出num的每个数字,对数组进行排序:
- 第一个数:最小的数+倒数第二大的数 组合而来
- 第二个数:第二小的数+最大的数 组合而来
不难发现,这样得到的两数之和一定是最小的。
Java代码
class Solution {
public static int minimumSum(int num) {
int[] arr = new int[4];
int index = 0;
while (num != 0){
arr[index++] = num % 10;
num = num / 10;
}
Arrays.sort(arr);
int a = arr[0] * 10 + arr[2];
int b = arr[1] * 10 + arr[3];
return a+b;
}
}