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

154 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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)