🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 ->拆分数位后四位数字的最小和
问题描述
给你一个四位 正 整数 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 ,我们可以对这个整数所有数位进行拆分然后进行重组,我们需要重组得到两个新的整数,并且要使得这两个整数之和最小。这里要使两个整数之和最小,我们需要使得到的两个整数也尽量的小。所以我们应该优先将较小的数字作为新数字的高位,这样得到的数字才会是最小的。
- 将整数
num进行数位拆分
我们先将整数num进行数位拆分,并将拆分后的数位数字按大小进行排序。如2932,我们可以得到数位数组:[2,2,3,9]。
num += "";
num = num.split("").sort((a, b) => a - b);
- 重组两个新数字
前面我们已经将整数num进行数位拆分并进行了排序,现在我们只需要交替从得到的数位中取值,将较小的值作为新数字的高位,这样我们可以得到两个最小的新数字,对其进行求和即可。
let num1 = "",
num2 = "";
while (num.length) {
num1 = num.pop() + num1;
if (num.length == 0) break;
num2 = num.pop() + num2;
}
AC 代码
完整 AC 代码如下:
/**
* @param {number} num
* @return {number}
*/
var minimumSum = function (num) {
num += "";
num = num.split("").sort((a, b) => a - b);
let num1 = "",
num2 = "";
while (num.length) {
num1 = num.pop() + num1;
if (num.length == 0) break;
num2 = num.pop() + num2;
}
return parseInt(num1) + parseInt(num2);
};
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,在此谢谢大家的支持,我们下文再见 🙌。