最小和分割
题目
题目分析
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; } };
标签:num1,num2,int,C++,力扣,len2,num,例题,string From: https://www.cnblogs.com/hcrzhi/p/18151445