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
}
}