列表

详情


6312. 最小和分割

给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足:

请你返回 num1num2 可以得到的和的 最小 值。

注意:

 

示例 1:

输入:num = 4325
输出:59
解释:我们可以将 4325 分割成 num1 = 24 和 num2 = 35 ,和为 59 ,59 是最小和。

示例 2:

输入:num = 687
输出:75
解释:我们可以将 687 分割成 num1 = 68 和 num2 = 7 ,和为最优值 75 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int splitNum(int num) { } };

php 解法, 执行用时: 8 ms, 内存消耗: 19 MB, 提交时间: 2023-10-09 07:48:40

class Solution {

    /**
     * @param Integer $num
     * @return Integer
     */
    function splitNum($num) {
        $ans=[];
        while($num!=0){
            $ans[]=$num%10;
            $num=floor($num/10);
        }
        sort($ans);
        $a=0;
        $b=0;
        for($i=0;$i<count($ans);$i+=2){
            $a=$a*10+$ans[$i];
            if($i==count($ans)-1)break;
            $b=$b*10+$ans[$i+1];
        }
        return $a+$b;
    }
}

rust 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-10-09 07:48:26

impl Solution {
    pub fn split_num(mut num: i32) -> i32 {
        let mut ans=Vec::with_capacity(10);
        while num!=0 {
            ans.push(num%10);
            num/=10;
        }
        ans.sort();
        let mut a=0;
        let mut b=0;
        for i in (0..ans.len()).step_by(2) {
            a=a*10+ans[i];
            if i==ans.len()-1 { 
                break;
            }
            b=b*10+ans[i+1];
        }
        a+b
    }
}

javascript 解法, 执行用时: 56 ms, 内存消耗: 41.2 MB, 提交时间: 2023-10-09 07:47:32

/**
 * @param {number} num
 * @return {number}
 */
var splitNum = function(num) {
    const stnum = [...String(num)].map(Number).sort((a, b) => a - b);
    let num1 = 0, num2 = 0;
    stnum.forEach((val, i) => {
        i % 2 == 0 ? num1 = num1 * 10 + val : num2 = num2 * 10 + val;
    });
    return num1 + num2;
};

cpp 解法, 执行用时: 0 ms, 内存消耗: 6.2 MB, 提交时间: 2023-10-09 07:47:13

class Solution {
public:
    int splitNum(int num) {
        string stnum = to_string(num);
        sort(stnum.begin(), stnum.end());
        int num1 = 0, num2 = 0;
        for (int i = 0; i < stnum.size(); ++i) {
            if (i % 2 == 0) {
                num1 = num1 * 10 + (stnum[i] - '0');
            }
            else {
                num2 = num2 * 10 + (stnum[i] - '0');
            }
        }
        return num1 + num2;
    }
};

java 解法, 执行用时: 1 ms, 内存消耗: 38.5 MB, 提交时间: 2023-03-08 17:35:28

class Solution {
    public int splitNum(int num) {
        var s = Integer.toString(num).toCharArray();
        Arrays.sort(s);
        var a = new int[2];
        for (int i = 0; i < s.length; i++)
            a[i % 2] = a[i % 2] * 10 + s[i] - '0'; // 按照奇偶下标分组
        return a[0] + a[1];
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-03-08 17:35:13

func splitNum(num int) int {
	s := []byte(strconv.Itoa(num))
	sort.Slice(s, func(i, j int) bool { return s[i] < s[j] })
	a := [2]int{}
	for i, c := range s {
		a[i%2] = a[i%2]*10 + int(c-'0') // 按照奇偶下标分组
	}
	return a[0] + a[1]
}

python3 解法, 执行用时: 36 ms, 内存消耗: 14.9 MB, 提交时间: 2023-03-08 09:41:26

class Solution:
    def splitNum(self, num: int) -> int:
        s = sorted(str(num))
        return int(''.join(s[::2])) + int(''.join(s[1::2]))

上一题