给你一个四位 正 整数 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 。
尝试做法:
class Solution {
public int minimumSum(int num) {
int[] sort = new int[10];
int ans = 0, times = 2;
for(int i = 0; i < 4; ++i){
++sort[num % 10];
num /= 10;
}
for(int i = 9; i > -1; --i){
while(sort[i] > 0){
if(times > 0){
ans += i;
--times;
}else{
ans += 10*i;
}
--sort[i];
}
}
return ans;
}
}
评论区比较常见的做法是将各位数提取到数组里,然后调用Arrays里的sort函数,我的做法是利用数字自身大小进行排序,适用范围可能较小,下面的做法通用一些:
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;
}
}
作者:睿智的仓鼠
链接:https://leetcode.cn/problems/minimum-sum-of-four-digit-number-after-splitting-digits/solutions/1248411/rui-zhi-de-cang-shu-tan-xin-suan-fa-by-e-9yat/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。