2578.最小和分割
链接:2578.最小和分割
难度:Easy
标签:贪心、数学、排序
简介:请你返回 num1 和 num2 可以得到的和的 最小 值。
题解 1 - python
- 编辑时间:2023-10-09
- 执行用时:24ms
- 内存消耗:15.56MB
- 编程语言:python
- 解法介绍:同上。
class Solution:
    def splitNum(self, num: int) -> int:
        nums = [0] * 10
        res = [0] * 2
        cur = 0
        while num:
            nums[num % 10] += 1
            num //= 10
        for i in range(10):
            while nums[i]:
                res[cur] = res[cur] * 10 + i
                nums[i] -= 1
                cur ^= 1
        return sum(res)
题解 2 - cpp
- 编辑时间:2023-10-09
- 内存消耗:6.16MB
- 编程语言:cpp
- 解法介绍:贪心。
class Solution {
public:
    int splitNum(int num) {
        vector<int> nums(10, 0);
        vector<int> res(2, 0);
        int cur = 0;
        for (; num; num /= 10) nums[num % 10]++;
        for (int i = 0; i < 10; i++) {
            for (; nums[i]; nums[i]--, cur ^= 1) {
                res[cur] = res[cur] * 10 + i;
            }
        }
        return res[0] + res[1];
    }
};
题解 3 - rust
- 编辑时间:2023-10-09
- 内存消耗:2.03MB
- 编程语言:rust
- 解法介绍:同上。
impl Solution {
    pub fn split_num(num: i32) -> i32 {
        let mut num = num as usize;
        let mut nums = vec![0; 10];
        let mut res = vec![0; 2];
        let mut cur = 0;
        while num != 0 {
            nums[num % 10] += 1;
            num /= 10;
        }
        for i in 0..10 {
            while nums[i] != 0 {
                res[cur] = res[cur] * 10 + i;
                cur ^= 1;
                nums[i] -= 1;
            }
        }
        res.into_iter().sum::<usize>() as i32
    }
}