【每周例题】力扣 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;
    }
};

  

posted @ 2024-04-22 20:22  山远尽成云  阅读(38)  评论(0)    收藏  举报