前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >48days强训——day6

48days强训——day6

作者头像
秋邱
发布2025-03-29 09:55:26
发布2025-03-29 09:55:26
3700
代码可运行
举报
文章被收录于专栏:笔记笔记
运行总次数:0
代码可运行

第一题:大数加法

链接:大数加法_牛客题霸_牛客网

描述 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。 数据范围:s.length,t.length≤100000s.length,t.length≤100000,字符串仅由'0'~‘9’构成 要求:时间复杂度 O(n)O(n) 示例1 输入: "1","99" 返回值: "100" 说明: 1+99=100 示例2 输入: "114514","" 返回值: "114514"

题解:只要进行模拟即可。

代码:

代码语言:javascript
代码运行次数:0
运行
复制
class Solution {
  public:
    string solve(string s, string t) 
    {
        string ret;
        int tmp = 0; 

        int i = s.size() - 1, j = t.size() - 1;
        while (i >= 0 || j >= 0 || tmp) 
        {
            if (i >= 0) tmp += s[i--] - '0';
            if (j >= 0) tmp += t[j--] - '0';
            ret += '0' + tmp % 10;
            tmp /= 10;
        }
        reverse(ret.begin(), ret.end());
        return ret;
    }
};

第二题:链表相加

链接:链表相加(二)_牛客题霸_牛客网

描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。 给定两个这种链表,请生成代表两个整数相加值的结果链表。 数据范围:0≤n,m≤10000000≤n,m≤1000000,链表任意值 0≤val≤90≤val≤9 要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n) 例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。

示例1 输入: [9,3,7],[6,3] 返回值: {1,0,0,0} 说明: 如题面解释 示例2 输入: [0],[6,3] 返回值: {6,3} 备注: 1≤n,m≤1061≤n,m≤106 0≤ai,bi≤90≤ai​,bi​≤9

题解:模拟高精度加法的过程,只不过是在链表中进行而已。

代码:

代码语言:javascript
代码运行次数:0
运行
复制
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution 
{
public:
    ListNode* reverse(ListNode* head)
    {
        ListNode* newHead = new ListNode(0);
        ListNode* cur = head;
        while(cur)
        {
            ListNode* next = cur->next;
            cur->next = newHead->next;
            newHead->next = cur;
            cur = next;
        }
        cur = newHead->next;
        delete newHead;
        return cur;
    }
    
    ListNode* addInList(ListNode* head1, ListNode* head2) 
    {
       // 1.逆序
        head1 = reverse(head1);
        head2 = reverse(head2);
        // 2. ⾼精度加法
        int t = 0;
        ListNode* cur1 = head1, *cur2 = head2;
        ListNode* ret = new ListNode(0);
        ListNode* prev = ret;
        while(cur1 || cur2 || t)
        {
            if(cur1)
            {
                t += cur1->val;
                cur1 = cur1->next;
            }
            if(cur2)
            {
                t += cur2->val;
                cur2 = cur2->next;
            }
            prev = prev->next = new ListNode(t % 10);
            t /= 10;
        }
        cur1 = ret->next;
        ret->next = nullptr;
        delete ret;
        return reverse(cur1);
    }
};

第三题:大数乘法

链接:大数乘法_牛客题霸_牛客网

描述 以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。 数据范围: 读入的数字大小满足 0≤n≤1010000≤n≤101000 要求:空间复杂度 O(m)O(m),时间复杂度 O(m2)O(m2)(假设m是n的长度) 示例1 输入: "11","99" 返回值: "1089" 说明: 11*99=1089 示例2 输入: "1","0" 返回值: "0"

题解:根据列竖式运算的过程模拟,1)反转字符串从个位算起;2)关键步骤tmp[i+j]记录各位乘积;3)处理进位;4)去零反转得结果。

代码:

代码语言:javascript
代码运行次数:0
运行
复制
class Solution {
public:

    string solve(string num1, string num2) 
    {
        //1.逆序
        reverse(num1.begin(),num1.end());
        reverse(num2.begin(),num2.end());
        int m = num1.size(),n = num2.size();
        vector<int>tmp(n+m-1);

        //2.先无进位相乘后相加
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                tmp[i+j] += (num1[i]-'0') * (num2[j]-'0');
            }
        }
        //3.处理进位
        int cur = 0,t = 0;
、
       string ret;
        while(cur < m+n-1 || t != 0)
        {
            if(cur < m+n-1) t += tmp[cur++];
            ret += t % 10 +'0';
            t /= 10;
        }
        cout << ret;
        //4.处理前导0
        while(ret.size() > 1 && ret.back() == '0') ret.pop_back();
        reverse(ret.begin(),ret.end());
        return ret;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一题:大数加法
  • 第二题:链表相加
  • 第三题:大数乘法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档