栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode

采用方法是模拟
错误代码:

char * addStrings(char * num1, char * num2){
    int i = strlen(num1) - 1, j = strlen(num2) - 1, add = 0;
    char* ans = malloc(sizeof(char) * fmax(i,j) + 3);
    int len = 0;
    //计算
    while(i >= 0 || j >= 0 || add != 0){
        int x = i >= 0 ? num1[i] - '0' : 0;
        int y = j >= 0 ? num2[j] - '0' : 0;
        int result = x + y + add;
        ans[len++] = result / 10;
        i--, j--;
    }
    //计算结果翻转过来
    for (int i = 0; 2 * i < len; i++){
        int t = ans[i];
        ans[i] = ans[len - i - 1], ans[len - i - 1] = t;
    }
    ans[len++] = 0;
    return ans;
}

记录错误:这段代码中ans 没有(char*)malloc,fmax(x,y)+3 没加括号;
在while循环中,ans[len++]和add串行了。

最后输出为“”,
输入
“11”
“123”
输出
“”
预期结果
"134"

正确代码如下:

char * addStrings(char * num1, char * num2){
    //从两个数字最后一位开始相加, add是表示进位
    int i = strlen(num1) - 1, j = strlen(num2) - 1, add = 0;
    //定义char指针并分配空间,fmax是c语言库函数
    char* ans = (char*)malloc(sizeof(char) * (fmax(i,j) + 3));
    int len = 0;
    //计算
    while(i >= 0 || j >= 0 || add != 0){
        
        int x = i >= 0 ? num1[i] - '0' : 0;
        int y = j >= 0 ? num2[j] - '0' : 0;
        //x, y 和进位相加
        int result = x + y + add;
        ans[len++] = '0' + result % 10;
        //进位数字
        add = result / 10;
        //从低到高依次相加
        i--, j--;
    }
    //计算结果翻转过来
    for (int i = 0; 2 * i < len; i++){
        int t = ans[i];
        ans[i] = ans[len - i - 1], ans[len - i - 1] = t;
    }
    ans[len++] = 0;
    return ans;
}

提交结果如下:

主要是为了逐渐弄懂代码,算法题目前写了几十个,不少都是自己写完发现有很大错误,然后照着题解一边写一边分析,现在打算将分析逐渐记录下来,并与大家分享,大家也可以在评论区提出错误。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/528919.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号