Leetcode2243. 计算字符串的数字和(可以,一次过)
Published on 2022-06-15 16:33 in 暂未分类 with 萧海~

Leetcode2243. 计算字符串的数字和(可以,一次过)

    在这里插入图片描述
    给你一个由若干数字(0 - 9)组成的字符串 s ,和一个整数。

    如果 s 的长度大于 k ,则可以执行一轮操作。在一轮操作中,需要完成以下工作:

    1. 将 s 拆分 成长度为 k 的若干 连续数字组 ,使得前 k 个字符都分在第一组,接下来的 k
      个字符都分在第二组,依此类推。注意,最后一个数字组的长度可以小于 k 。
    2. 用表示每个数字组中所有数字之和的字符串来 替换 对应的数字组。例如,"346" 会替换为 "13" ,因为 3 + 4 + 6 = 13
    3. 合并 所有组以形成一个新字符串。如果新字符串的长度大于 k 则重复第一步。

    返回在完成所有轮操作后的 s 。

    示例 1:

    输入:s = "11111222223", k = 3
    输出:"135"
    解释:
    - 第一轮,将 s 分成:"111""112""222""23"
    接着,计算每一组的数字和:1 + 1 + 1 = 31 + 1 + 2 = 42 + 2 + 2 = 62 + 3 = 5
    这样,s 在第一轮之后变成 "3" + "4" + "6" + "5" = "3465"
    - 第二轮,将 s 分成:"346""5"
    接着,计算每一组的数字和:3 + 4 + 6 = 135 = 5
    这样,s 在第二轮之后变成 "13" + "5" = "135"
    现在,s.length <= k ,所以返回 "135" 作为答案。

    示例 2:

    输入:s = "00000000", k = 3
    输出:"000"
    解释:
    "000", "000", and "00".
    接着,计算每一组的数字和:0 + 0 + 0 = 00 + 0 + 0 = 00 + 0 = 0
    s 变为 "0" + "0" + "0" = "000" ,其长度等于 k ,所以返回 "000"

    提示:

    • 1 <= s.length <= 100
    • 2 <= k <= 100
    • s 仅由数字(0 - 9)组成。

    Code:

    class Solution {
    public:
    string digitSum(string s, int k) {
    string res;
    string temp=s;
    int i=0;
    vector<string>vec;
    do
    {
    if(s.length()<=k)
    break;
    temp=s.substr(0+k*(i++),k);
    if(temp.length())
    vec.push_back(temp);
    if(temp.length()<k )
    {
    string newstr;
    for(int j=0;j<vec.size();j++)
    {
    int num=0;
    string sub=vec[j];
    for(int k=0;k<sub.length();k++)
    num+=sub[k]-'0';
    newstr+=to_string(num);
    }
    // cout<<"++"<<newstr<<endl;
    s=newstr;
    i=0;
    vec.clear();
    }
    }while(1);
    // cout<<s<<endl;
    return s;
    }
    };
    posted @   萧海~  阅读(27)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · DeepSeek “源神”启动!「GitHub 热点速览」
    · 我与微信审核的“相爱相杀”看个人小程序副业
    · 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
    · 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
    · C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
    点击右上角即可分享
    微信分享提示
    电磁波切换