LeetCode·每日一题·415. 字符串相加·模拟

这篇具有很好参考价值的文章主要介绍了LeetCode·每日一题·415. 字符串相加·模拟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

LeetCode·每日一题·415. 字符串相加·模拟,LeetCode刷题笔记,leetcode,算法,职场和发展

 文章来源地址https://www.toymoban.com/news/detail-598120.html

思路

题意 -> 给定二个字符串,计算它们的和并同样以字符串形式返回。

直接从尾部向头部进行枚举,模拟实际计算过程,每取一个数就将字符转换为数字,然后计算之后再将其转换为字符存储,最后判断是否存在进位,如果存在进位就将进位也存储。

关于进位的一个技巧,因为和运算,进位只可能有 1,因此在开辟内存的时候就将进位的位置开辟出来,并赋值 为 1,最后返回时,如果存在进位就返回字符串首地址,反之返回字符串首地址 + 1 ---- 去取进位影响。

代码注释超级详细

ps:此题我在去年的时候也做过一次,再回看当时代码时,感慨万千,通过看代码就知道,当时代码水平非常有限,代码写的也非常冗余,经过一年的学习,进步还是非常明显的。各位努力吧!!!

LeetCode·每日一题·415. 字符串相加·模拟,LeetCode刷题笔记,leetcode,算法,职场和发展

 

代码

char * addStrings(char * num1, char * num2){
    int len1 = strlen(num1);
    int len2 = strlen(num2);
    int len = (len1 > len2 ? len1 : len2) + 2;
    char *ans = malloc(sizeof(char) * len);
    memset(ans, 0, len);//初始化
    ans[0] = '1';//进位赋值
    int c = 0;//记录进位
    for (int i = len - 2; i > 0; i--) {
        int sum = 0;//记录和
        if (len1 > 0) {//取数
            sum += (num1[len1 - 1] - '0');
            --len1;
        }
        if (len2 > 0) {//取数
            sum += (num2[len2 - 1] - '0');
            --len2;
        }
        sum += c;//加上一位的进位
        c = sum / 10;//保存进位
        sum %= 10;//保存当前位
        ans[i] = sum + '0';//字符存储
    }
    return c ? ans : ans+1;//判断进位返回对应地址
}

作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
char * addStrings(char * num1, char * num2){
    int num1_len = strlen(num1);
    int num2_len = strlen(num2);
    int len_1 = num1_len-1;
    int len_2 = num2_len-1;
    int max_len = num1_len>num2_len ? num1_len : num2_len;
    char * num = malloc(sizeof(char) * (max_len+2));
    int i =0,sum = 0,max = max_len+2;
    while(len_1>=0&&len_2>=0)
    {
        sum = (num1[len_1--]-'0')+(num2[len_2--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    while(len_1>=0)
    {
        sum = (num1[len_1--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    while(len_2>=0)
    {
        sum = (num2[len_2--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    if(i>0)
    {
        num[0] = i+'0';
        num[max-1] ='\0';
        return num;
    }
    num[max-1] ='\0';
    return ++num;
    
}


作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

到了这里,关于LeetCode·每日一题·415. 字符串相加·模拟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ( 字符串) 205. 同构字符串 ——【Leetcode每日一题】

    难度:简单 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个

    2024年02月02日
    浏览(54)
  • (字符串 ) 459. 重复的子字符串——【Leetcode每日一题】

    难度:简单 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s = “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s = “aba” 输出: false 示例 3: 输入: s = “abcabcabcabc” 输出: true 解释: 可由子串 “abc” 重复四次构

    2024年02月07日
    浏览(47)
  • (字符串) 844. 比较含退格的字符串——【Leetcode每日一题】

    难度:简单 给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。 # 代表退格字符。 注意 :如果对空文本输入退格字符,文本继续为空。 示例 1: 输入:s = “ab#c”, t = “ad#c” 输出:true 解释:s 和 t 都会变成 “ac”。 示例 2: 输入

    2024年02月11日
    浏览(42)
  • (字符串 ) 剑指 Offer 58 - II. 左旋转字符串 ——【Leetcode每日一题】

    难度:简单 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串\\\"abcdefg\\\"和数字2,该函数将返回左旋转两位得到的结果\\\"cdefgab\\\"。 示例 1: 输入: s = “abcdefg”, k = 2 输出: “cdefgab” 示例 2:

    2024年02月08日
    浏览(48)
  • ( 字符串) 647. 回文子串 ——【Leetcode每日一题】

    难度:中等 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串

    2024年02月01日
    浏览(44)
  • (贪心) 1221. 分割平衡字符串 ——【Leetcode每日一题】

    难度:简单 平衡字符串 中, \\\'L\\\' 和 \\\'R\\\' 字符的数量是相同的。 给你一个平衡字符串 s ,请你将它分割成尽可能多的子字符串,并满足: 每个子字符串都是平衡字符串。 返回可以通过分割得到的平衡字符串的 最大数量 。 示例 1: 输入:s = “RLRRLLRLRL” 输出:4 解释:s 可以分

    2024年02月11日
    浏览(34)
  • (字符串) 925. 长按键入 ——【Leetcode每日一题】

    难度:简单 你的朋友正在使用键盘输入他的名字 name 。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。 你将会检查键盘输入的字符 typed 。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True 。 示例 1: 输入:na

    2024年02月09日
    浏览(58)
  • 【LeetCode每日一题】2182. 构造限制重复的字符串

    2024-1-13 2182. 构造限制重复的字符串 思路: 按照字符出现次数从高到低的顺序进行重复,通过维护一个指针 j 来寻找下一个非零出现次数的字母。同时,利用 StringBuilder 对象可以高效地构建字符串,避免频繁的字符串拼接操作 首先,创建一个长度为26的数组 cnt ,用于统计字

    2024年01月18日
    浏览(47)
  • 【LeetCode每日一题】2788. 按分隔符拆分字符串

    2024-1-20 2788. 按分隔符拆分字符串 思路: 对于每个单词,使用一个可变字符串 StringBuilder 来构建拆分后的单词。初始时,可变字符串为空。 遍历每个单词的每个字符,如果遇到指定的分隔符,就将可变字符串中的字符构成一个新的单词,并将其添加到结果列表中。然后清空可

    2024年01月21日
    浏览(52)
  • leetcode每日一题Day2——344. 反转字符串

    ✨ 博主: 命运之光   🦄 专栏: 算法修炼之练气篇(CC++版) 🍓 专栏: 算法修炼之筑基篇(CC++版) 🐳 专栏: 算法修炼之练气篇(Python版) ✨ 博主的其他文章: 点击进入博主的主页   前言:欢迎来到这个LeetCode每日算法题专栏! 🌊 无论你是编程新手还是有一定经验

    2024年02月14日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包