【c++笔试强训】(第九篇)

目录

链表相加(⼆)(链表+⾼精度加法)

题目解析

讲解算法原理

编写代码

⼤数乘法(⾼精度乘法)

题目解析

讲解算法原理

辨析代码


链表相加(⼆)(链表+⾼精度加法)

题目解析

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

2.题目描述

描述

假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。

给定两个这种链表,请生成代表两个整数相加值的结果链表。

数据范围:0 \le n,m \le 10000000≤n,m≤1000000,链表任意值 0 \le val \le 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}

讲解算法原理

解法:
算法思路:

模拟⾼精度加法的过程,只不过是在链表中进⾏⽽已。

编写代码

c++算法代码:

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);
 }
};

java算法代码:

import java.util.*;
public class Solution
{
 // 逆序链表
 public ListNode reverse(ListNode head)
 {
 ListNode newHead = new ListNode(0);
 ListNode cur = head;
 while(cur != null)
 {
 ListNode next = cur.next;
 cur.next = newHead.next;
 newHead.next = cur;
 cur = next;
 }
 return newHead.next;
 }
 public ListNode addInList (ListNode head1, ListNode head2) 
 {
 // 1. 逆序
 head1 = reverse(head1);
 head2 = reverse(head2);
 // 2. ⾼精度加法
 ListNode cur1 = head1, cur2 = head2;
 int t = 0;
 ListNode ret = new ListNode(0), prev = ret;
 while(cur1 != null || cur2 != null || t != 0)
 {
 if(cur1 != null)
 {
 t += cur1.val;
 cur1 = cur1.next;
 }
 if(cur2 != null)
 {
 t += cur2.val;
 cur2 = cur2.next;
 }
 prev = prev.next = new ListNode(t % 10);
 t /= 10;
 }
 return reverse(ret.next);
 }
}

⼤数乘法(⾼精度乘法)

题目解析

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

2.题目描述

描述

以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。

数据范围: 读入的数字大小满足 0 \le n \le 10^{1000}0≤n≤101000

要求:空间复杂度 O(m)O(m),时间复杂度 O(m^2)O(m2)(假设m是n的长度)

示例1

输入:

"11","99"

复制返回值:

"1089"

复制说明:

11*99=1089 

示例2

输入:

"1","0"

复制返回值:

"0"

讲解算法原理

解法:
算法思路:

根据列竖式运算的过程模拟即可。
但是我们可以改进⼀下列竖式的过程:
▪ 先计算⽆进位相乘并且相加后的结果;
▪ 然后再处理进位。

辨析代码

c++算法代码:

class Solution
{
public:
 string solve(string s, string t) 
 {
 reverse(s.begin(), s.end());
 reverse(t.begin(), t.end());
 int m = s.size(), n = t.size();
 vector<int> tmp(m + n);
 // 1. ⽆进位相乘相加
 for(int i = 0; i < m; i++)
 {
 for(int j = 0; j < n; j++)
 {
 tmp[i + j] += (s[i] - '0') * (t[j] - '0');
 }
 }
 // 2. 处理进位
 int c = 0;
 string ret;
 for(auto x : tmp)
 {
 c += x;
 ret += c % 10 + '0';
 c /= 10;
 }
 while(c)
 {
 ret += c % 10 + '0';
 c /= 10;
 }
 // 3. 处理前导零
 while(ret.size() > 1 && ret.back() == '0') ret.pop_back();
 
 reverse(ret.begin(), ret.end());
 return ret;
 }
};

java算法代码:

import java.util.*;
public class Solution
{
 public String solve (String ss, String tt) 
 {
 char[] s = new StringBuffer(ss).reverse().toString().toCharArray();
 char[] t = new StringBuffer(tt).reverse().toString().toCharArray();
 int m = s.length, n = t.length;
 int[] tmp = new int[m + n];
 // 1. ⽆进位相乘相加
 for(int i = 0; i < m; i++)
 {
 for(int j = 0; j < n; j++)
 {
 tmp[i + j] += (s[i] - '0') * (t[j] - '0');
 }
 }
 // 2. 处理进位
 StringBuffer ret = new StringBuffer();
 int c = 0;
 for(int x : tmp)
 {
 c += x;
 ret.append((char)(c % 10 + '0'));
 c /= 10;
 }
 while(c != 0)
 {
 ret.append((char)(c % 10 + '0'));
 c /= 10;
 }
 // 3. 处理前导零
 while(ret.length() > 1 && ret.charAt(ret.length() - 1) == '0')
 {
 ret.deleteCharAt(ret.length() - 1);
 }
 return ret.reverse().toString();
 }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/916080.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#高级:使用Invoke关键字通过 Type 类型调用指定的方法

demo如下&#xff1a; using System.Reflection; using System;public class Program {public class Calculator{public int Add(int a, int b){return a b;}}public class Student{public string Name { get; set; }}public class Example{// 泛型方法public string Generi…

B-树特点以及插入、删除数据过程

B树&#xff08;B-Tree&#xff09;是一种自平衡的多路查找树&#xff0c;它广泛应用于数据库索引和文件系统中&#xff0c;尤其适用于外部存储设备&#xff08;如磁盘&#xff09;。B树的设计使得它能够高效地存储大量数据并支持高效的插入、删除和查询操作。以下是B树的主要特…

自定义反序列化过程

需求&#xff1a;student对象中name属性&#xff0c;序列化时将该属性映射为stuname&#xff0c;反序列化时将 Json中的NAME键值对映射到name属性中 AllArgsConstructorNoArgsConstructorGetterSetterstatic class Student {JsonProperty("stuname")private List<…

解读 ConcurrentHashMap 源码:探索高并发场景下的卓越性能

ConcurrentHashMap 了&#xff0c;作为线程安全的 HashMap &#xff0c;它的使用频率也是很高。那么它的存储结构和实现原理是怎么样的呢&#xff1f;HashMap 源码&#xff1a;揭开哈希表背后的秘密 1、ConcurrentHashMap 1.7 1. 存储结构 Java 7 中 ConcurrentHashMap 的存储…

为什么配置TIM11作为系统时基的时候会出现__NVIC_PRIO_BITS

回想起当初学freertos的时候&#xff0c;某个中断优先级以下的任务是不能被freertos管理的&#xff08;好像是全是抢占优先级&#xff0c;0子优先级的设置&#xff09;。当初还不是非常了解。只知道管理不了 HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {RCC_ClkI…

数字IC实践项目(10)—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证(付费项目)

数字IC实践项目&#xff08;10&#xff09;—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证&#xff08;付费项目&#xff09; 前言项目框图1&#xff09;DDR4 Verification IP2&#xff09;DDR4 JEDEC Model & Tb 项目文件1&#xff09;DDR4 Veri…

python解析网页上的json数据落地到EXCEL

安装必要的库 import requests import pandas as pd import os import sys import io import urllib3 import json测试数据 网页上的数据结构如下 {"success": true,"code": "CIFM_0000","encode": null,"message": &quo…

wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 wflow-web是一个开源的工作流设计器&#xff0c;它支持可视化拖拽表单组件&#xff0c;动态任意层级结构审批节点&#xff0c;以及复杂流程条件的设置…

adobe acrobat 安装中文支持

win11英文语言导致adobe没中文支持 参考这里 做了安装里面还有一个fix 中文ocr的 我的系统是英文的 我发现adobe配置里无法修改 系统apps里去修改安装程序 中文简体功能及附属能力都安装到系统里但是安装后&#xff0c;还是没有&#xff1a; 按照ctl &#xff0c;然后点击…

每日小题--买股票的最佳时机

目录 题目 分析 解题思路 完整代码 题目 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润…

AUTOSAR_EXP_ARAComAPI的7章笔记(3)

☞返回总目录 相关总结&#xff1a;AutoSar AP简单多绑定总结 7.3 多绑定 如在 5.4.3 小节中简要讨论的&#xff0c;某个代理类 / 骨架类的不同实例之间的技术传输是不同的&#xff0c;多绑定描述了这种情况的解决方案。多种技术原因都可能导致这种情况出现&#xff1a; 代…

Xcode 16 pod init失败的解决方案

目录 前言 一、错误重现 二、解决方案 1.右击项目修改文件展示方式 2.修改.xcodeproj文件 3.参考文档 前言 我们使用Xcode创建新项目之后&#xff0c;执行pod init报错。我们看一下如何解决。 一、错误重现 RuntimeError - PBXGroup attempted to initialize an object …

MySQL联合索引(abc)命中测试

1.建表 mysql创建一张表&#xff0c;表名&#xff1a;‘test_models’ id列为 主键&#xff0c;int类型 &#xff0c;自增a,b,c,d,e 全部是int&#xff08;11&#xff09;为&#xff08;a,b,c&#xff09;添加一个联合索引 index_abc 执行语句&#xff1a;创建表 CREATE TA…

ssm药房管理系统—计算机毕业设计源码42430

目 录 摘要 1 绪论 1.1课题目的及意义 1.2研究背景 1.3 研究方法 1.4论文结构与章节安排 2 药房管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.…

pgSQL-timescaledb复制表出现的问题

今日在工作中&#xff0c;需要复制一张timescaledb表&#xff0c;pgAdmin上复制一直未成功&#xff0c;或者我找错位置了。 1.我使用Navicate连接pgSQL&#xff0c;连上后选中相应表&#xff0c;右键复制结构即可 2.复制结构后&#xff0c;到pgAdmin中&#xff0c;将对应表下的…

CSP/信奥赛C++语法基础刷题训练(8):洛谷P5718:找最小值

CSP/信奥赛C语法基础刷题训练&#xff08;8&#xff09;&#xff1a;洛谷P5718&#xff1a;找最小值 题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​&#xff0c;求这 n n n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n n n&#xff0c;表示数字个数。…

恒源云使用手册记录:从服务器下载数据到本地

文章目录 一、xftp下载二、通过Xftp客户端连接站点 一、xftp下载 先下载xftp&#xff1a;下载连接 二、通过Xftp客户端连接站点 右击文件&#xff0c;点击新建 名称可以任意 主机、端口号、用户名 点击这里的复制登录命令 比如我这里得到ssh -p 41604 rooti-2.gpushare.co…

电子工牌独立双通道定向拾音方案(有视频演示)

现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…

Elasticsearch 和 Kibana 8.16:Kibana 获得上下文和 BBQ 速度并节省开支!

作者&#xff1a;来自 Elastic Platform Product Team Elastic Search AI 平台&#xff08;Elasticsearch、Kibana 和机器学习&#xff09;的 8.16 版本包含大量新功能&#xff0c;可提高性能、优化工作流程和简化数据管理。 使用更好的二进制量化 (Better Binary Quantizatio…

亮数据——助力全球数据抓取的高效代理平台

目录 实际案例&#xff1a;利用代理服务抓取企业信息完整代码运行结果 亮数据的技术优势与应用场景产品更新&#xff1a;简化注册流程与智能助手升级立即注册&#xff0c;开启您的数据抓取之旅&#xff01; 在如今的大数据时代&#xff0c;企业决策越来越依赖于数据分析&#x…