2023-10-09每日一题
一、题目编号
2578. 最小和分割
二、题目链接
点击跳转到题目位置
三、题目描述
给你一个正整数 num ,请你将它分割成两个非负整数 num1 和 num2 ,满足:
-
num1 和 num2 直接连起来,得到 num 各数位的一个排列。
- 换句话说,num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。
-
num1 和 num2 可以包含前导 0 。
请你返回 num1 和 num2 可以得到的和的 最小 值。
注意:
- num 保证没有前导 0 。
- num1 和 num2 中数位顺序可以与 num 中数位顺序不同。
示例1:
示例2:
四、解题代码
class Solution {
public:
int splitNum(int num) {
vector<int> nums;
while(num != 0){
nums.push_back(num%10);
num /= 10;
}
sort(nums.begin(), nums.end());
int num1 = 0;
int num2 = 0;
for(int i = 0; i < nums.size(); ++i){
if(i & 1){
num1 *= 10;
num1 += nums[i];
} else{
num2 *= 10;
num2 += nums[i];
}
}
return num1 + num2;
}
};
五、解题思路
(1) 采用排序+贪心的思想