开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
题目描述
给你一个四位 正 整数 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 的 最小 和。
来源:力扣(LeetCode)
- 示例 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 。
思路分析
根据题意可知,题目给出一个四位正整数的数字;需要我们将num拆成两个新的正整数,找出两个最小值并计算出它们的最小和。四个数字中,每个都需要用到,并且,一个数字只能用一次。
只要先拿出最小的两个作为两个新整数的十位数,两个大的数字作为两个新整数的个位数,那么这两个新整数相加的和绝对是最小之和。但是,有个例外,就是四位正整数中有可能有两三个是0,所以,最小的两个就是0了,但是两位数的数值的十位数不能是0,所以得加个判断,如果十位数的数值是0的话,就只取个位数去做加法就可以了。
提示:
1000 <= num <= 9999
AC代码
function solution(num) {
let arr = String(num).split('');
for(let i=0; i<arr.length; i++) {
for(let j=0; j<arr.length-i; j++) {
if(arr[j] > arr[j+1]) {
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
let firstNum = Number(arr[0]) * 10 + Number(arr[2]);
let twoNum = Number(arr[1])* 10 + Number(arr[3]);
let res = firstNum + twoNum;
console.log(res)
};
let num = 4009;
solution(num)