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

简介: 拆分数位后四位数字的最小和

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

问题描述

给你一个四位    整数  num 。请你使用  num  中的  数位 ,将  num  拆成两个新的整数  new1  和  new2new1  和  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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
7月前
|
算法 测试技术 C#
C++数位算法:数字1的个数
C++数位算法:数字1的个数
|
7月前
对于十进制数 -1023,包含符号位在内,至少需要多少个二进制位表示该数
对于十进制数 -1023,包含符号位在内,至少需要多少个二进制位表示该数
56 0
|
2天前
leetcode 2520 统计能整除数字的位数
leetcode 2520 统计能整除数字的位数
5 0
|
2天前
|
算法 测试技术 C++
【数位dp】【C++算法】600. 不含连续1的非负整数
【数位dp】【C++算法】600. 不含连续1的非负整数
|
2天前
[leetcode 数位计算]2520. 统计能整除数字的位数
[leetcode 数位计算]2520. 统计能整除数字的位数
|
10月前
用户输入数字,如果数字小于10,则在前面补0,比如01,09,如果数字大于10,则不需要补,比如 20
用户输入数字,如果数字小于10,则在前面补0,比如01,09,如果数字大于10,则不需要补,比如 20
109 0
|
11月前
判断数字位数
判断数字位数
42 0
|
12月前
求整数的位数及各位数字之和
求整数的位数及各位数字之和
80 0
LeetCode 1295. 统计位数为偶数的数字
LeetCode 1295. 统计位数为偶数的数字
357. 计算各个位数不同的数字个数
357. 计算各个位数不同的数字个数
357. 计算各个位数不同的数字个数