【每周例题】力扣 C++ 最小和分割
最小和分割
题目

题目分析
1.num1 和 num2 中所有数字出现的次数之和等于 num 中所有数字出现的次数。即,num1与num2是从num中提取出来的,且不会重复提取同一个数字,且提取的顺序并不需要按照num的数字顺序
2.返回 num1 和 num2 可以得到的和的最小值。要想得到最小值,需要满足下面的条件:
- num1与num2之间相差的长度不能大于1.
3.这边的思路是:
- 将num转为字符串,然后使用sort函数对num进行排序
- 遍历num,将num每个数交错加入num1与num2,即:
for (int i = 0; i < s.length(); i++)
{
if (i % 2 == 0)
{
num1 += s[i];
}
else
{
num2 += s[i];
}
}
- 最后再将num1与num2转化为int
- 最后返回相加的值
代码
普通代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num;
cin >> num;
string s = to_string(num);
string num1, num2;
sort(s.begin(), s.end());
for (int i = 0; i < s.length(); i++)
{
if (i % 2 == 0)
{
num1 += s[i];
}
else
{
num2 += s[i];
}
}
int len1 = stoi(num1);
int len2 = stoi(num2);
return len1 + len2;
}
力扣代码
class Solution {
public:
int splitNum(int num)
{
string s = to_string(num);
string num1, num2;
sort(s.begin(), s.end());
for (int i = 0; i < s.length(); i++)
{
if (i % 2 == 0)
{
num1 += s[i];
}
else
{
num2 += s[i];
}
}
int len1 = stoi(num1);
int len2 = stoi(num2);
return len1 + len2;
}
};

浙公网安备 33010602011771号