拆分数位后四位数字的最小和

181 阅读2分钟

🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 ->拆分数位后四位数字的最小和

问题描述

给你一个四位    整数  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进行数位拆分并进行了排序,现在我们只需要交替从得到的数位中取值,将较小的值作为新数字的高位,这样我们可以得到两个最小的新数字,对其进行求和即可。

image.png

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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,在此谢谢大家的支持,我们下文再见 🙌。