Leetcode关于加法运算的总结

133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能 《Vue3+OpenLayers实现多边形绘制与区域处理》摘要:本文介绍如何基于Vue3+OpenLayers+ol-ext实现地图多边形交互功能。核心功能包括:鼠标绘制任意多边形、拖动顶点编辑边界、遮罩显示(非选区变红)、选区剪切显示及功能重置。技术方案采用OpenLayers处理地图渲染,ol-ext实现高级遮罩/剪切效果,ElementPlus提供UI控件。该方案适用于城市规划、园区展示等需要区域标记的场景,完整代码展示了从初始化、绘制、编辑到特效处理的全流程实现。 阅读详情

一个人对行为本身的意愿和他对于行为带来的结果的意愿,两者都是一个人最终是否行动的动机因素。
每一个因素都有自身的拉力,若两个力是相对的,则其中更强大的因素将会决定一个人的行为。

415. 字符串相加
67. 二进制求和

2. 两数相加

445. 两数相加 II

66. 加一

989. 数组形式的整数加法


1. 加法运算

模拟加法运算

真正在刷题的过程中,我们只需要记住几点即可:

  1. 低位到高位,逐位求和的算法为:sum = x + y + carry.( x和y 分别来表示每位的数值,carry 表示进位,默认为0)
  2. 当前位的值:cur = sum % 10
  3. 进位carry的值:carry = sum / 10;

PS:因为是从低位 ->高位,所以需要注意结果是否需要翻转,通常可借助于:

  • 反转操作:

    1. StringBuilder/ StringBuffer 的 reverse();
    2. Collections.reverse();

  • 头插法思想:

    1. LinkedList的addFirst(value) ;
    2. 链表的头插法;
    3. ArrayList的add(0, value)
  • 栈

下面我们通过这个模拟操作,来解决Leetcode的相关问题。


415. 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

1. 常规写法
 	 public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        
        int i = num1.length() -1;
        int j = num2.length() -1;
        
        int carry = 0;

        while(i >= 0 || j >= 0 || carry > 0){
            // 字符0就是48
            int x = (i >= 0) ? num1.charAt(i--) - '0' : 0;
            int y = (j >= 0) ? num2.charAt(j--) - '0' : 0;
            
            int sum = (x + y + carry);
            int curVal = sum % 10; //当前位的值
 			sb.append(curVal);
 			
            carry = sum / 10;// 处理进位的值
        }

        return sb.reverse().toString();
    }

2. 精炼写法

本质上没有任何区别,只是在熟练之后,我们往往会在不破坏代码可读性的情况,对代码做出优化。

 public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();

        int i = num1.length() -1;
        int j = num2.length() -1;
        
        int carry = 0;

        while(i >= 0 || j >= 0 || carry > 0){
            // 字符0就是48
            carry += (i >= 0) ? num1.charAt(i--) - '0' : 0;
            carry += (j >= 0) ? num2.charAt(j--) - '0' : 0;
            
            sb.append(carry % 10);
            
            carry /= 10;// 处理进位的值
        }

        return sb.reverse().toString();
    }

趁热打铁-67. 二进制求和


2. 链表中的两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

在这里插入图片描述

In a word, 求数据结构之链表的两数之和问题。

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int carry = 0;
        ListNode dummy = new ListNode(-1);
        ListNode cur = dummy;

        while(l1 != null || l2 != null || carry != 0){
            carry += (l1 != null) ? l1.val : 0;
            carry += (l2 != null) ? l2.val : 0;

            cur.next = new ListNode(carry % 10);
            cur = cur.next;

            carry /= 10;

            if(l1 != null){
                l1 = l1.next;
            }
            if(l2 != null){
                l2 = l2.next;
            }
        }
        return dummy.next;
    }

445. 链表中的两数相加 II

闲暇之余,可以顺手解决 剑指 Offer II 025. 链表中的两数相加

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。

在这里插入图片描述
进阶:如果输入链表不能翻转该如何解决?

人生苦短,我要翻转 , 感兴趣的可以点进去看一下。

进阶解法

不让我们翻转,那我们就采用前面介绍的一些手段来达到翻转的效果。
需要注意的是,此题有两处需要翻转:

  1. 操作数的链表翻转 ;
  2. 结果需要翻转;

最佳方案; 数据结构(栈) + 链表的头插法。

 	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
	// 第一步:入栈操作
	    Stack<Integer> s1 = new Stack<>();
        Stack<Integer> s2 = new Stack<>();

        while(l1 != null){
            s1.push(l1.val);
            l1 = l1.next;
        }

        while(l2 != null){
            s2.push(l2.val);
            l2 = l2.next;
        }
        // 头插法
 		ListNode head = null;
        int carry = 0;

        while(!s1.isEmpty() || !s2.isEmpty() || carry > 0){
            carry += (s1.isEmpty()) ? 0 : s1.pop();
            carry += (s2.isEmpty()) ? 0 : s2.pop();

            ListNode node =  new ListNode(carry % 10);
            node.next = head;
            head = node;
            carry /= 10;
        }

        return head;
  }

43. 字符串相乘

在这里插入图片描述

 public String multiply(String num1, String num2) {
        if(num1.equals("0") || num2.equals("0")){
            return "0";
        }

        if(num1.equals("1")){
            return num2;
        }

        if(num2.equals("1")){
            return num1;
        }

        String result = "0";

        int len1 = num1.length();
        int len2 = num2.length();
        
        for(int i = len2 - 1; i >= 0;i--){
            int carry = 0;
            StringBuilder tmp = new StringBuilder();
            //补0
            for(int j = 0;j < len2-1 - i;j++){
                tmp.append(0);
            }
            int n2 = num2.charAt(i) - '0';

            for(int j = len1 - 1; j >= 0|| carry != 0; j--){
                int n1 = j < 0 ? 0:num1.charAt(j) - '0';
                int product = (n1 * n2 +carry) % 10;
                tmp.append(product);
                carry = (n1 * n2+carry)/ 10;
            }

            result = addStrings(result,tmp.reverse().toString());
        }
        return result;
    }
	// 实现字符串相加的功能
    public String addStrings(String num1,String num2){
        StringBuilder sb = new StringBuilder();
        int carry = 0;

        int i1 = num1.length() - 1;
        int i2 = num2.length() - 1;

        while(i1 >= 0 || i2 >= 0 || carry > 0){
            carry += i1 >= 0 ? (num1.charAt(i1--) - '0'):0;
            carry += i2 >= 0 ? (num2.charAt(i2--) - '0'):0;
            sb.append(carry % 10);
            carry /= 10;
        }
        return sb.reverse().toString();
    }


```


SKUA-GOCAD入门教程-第八节 线的创建与编辑7和8 本文介绍了曲线编辑操作的主要功能,包括曲线部分和区域的管理操作。在曲线部分操作方面,详细说明了如何合并、删除、移动和过滤曲线部分,支持精确或带公差的合并方式。在曲线区域操作方面,阐述了保留/删除区域点、移动区域点、保留/删除区域线段等操作。此外还介绍了节点连接功能,包括新增/删除连接、端点连接以及为曲线赋予地质特征的方法。 阅读详情

相关推荐

写一个b站爬虫(思路)

part 0 安装 scrapy, requests part 1 信息获取 打开番剧索引链接(https://www.bilibili.com/anime/index/) F12控制台,选中NETWORK,来到xhr文件,我们可以找到了存放番剧json的地方

kou的博客 484

玩转Leetcode里的加法题目

这几天刷题,碰到好几次关于加法的题目。这些题目包括:二进制求和、两数相加、链表相加、字符串相乘、数组形式的整数加法。所以今天就特意写一个关于加法的博客,做个小总结

weixin_47382783的博客 587

S32K344 Flash Driver实战:手把手教你实现任意字节写入与扇区解锁(含C40_Ip避坑指南)

本文深入解析S32K344微控制器的Flash驱动开发,重点解决C40_Ip驱动库的8字节对齐限制和扇区保护锁问题。通过实战案例和代码示例,详细介绍了如何实现任意字节写入、扇区解锁及性能优化策略,为Bootloader和OTA升级等应用提供可靠解决方案。

weixin_33713707的博客 432

【Lintcode】1398. K Decimal Addition

题目地址: https://www.lintcode.com/problem/1398/ 给定一个整数kkk满足2≤k≤102\le k\le 102≤k≤10,再给定两个字符串表示的kkk进制的数aaa和bbb,求aaa和bbb的和,注意去掉前导000。 其实就是高精度加法。代码如下: public class Solution { /** * @param k: The k * @param a: The A * @param b: The B * @re

数学、算法爱好者的博客 337

如何在STM32上5分钟搞定nanopb协议传输?附完整代码示例

本文提供了在STM32微控制器上快速集成nanopb协议传输的实战指南。通过详细的步骤,从.proto文件定义、代码生成到STM32CubeIDE项目移植,帮助开发者利用nanopb这一轻量级Protocol Buffers C语言实现,在5分钟内构建高效、跨平台的嵌入式设备通信框架,并附有完整的代码示例。

jwt8token的博客 838

[南大ICS]PA1 - 开天辟地的篇章: 最简单的计算机

task PA1.1: 实现单步执行, 打印寄存器状态, 扫描内存 task PA1.2: 实现算术表达式求值 task PA1.3: 实现所有要求, 提交完整的实验报告

qq_42474104的博客 1570

记录LC:两数相加

给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0开头。 class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { //定义一个新联表伪指针,用来指向头指针,返回结果 ListNod...

一只程序小洋的博客 525

STM32CubeMx+stm32f407+FreeRTOS+LAN8720实现LWIP以太网UDP TCP数据收发功能

单片机实现LWIP的调试

qq_40600203的博客 3068

【leetcode】字符串,链表的进位加法与乘法

📚 算法题解:字符串与链表数值运算 本期解析力扣经典算法题,重点讲解字符串和链表形式的数值运算问题: 1️⃣ 字符串相加(LeetCode 415) 模拟竖式加法,逐位相加处理进位 时间复杂度O(max(M,N)),空间复杂度O(1) 2️⃣ 链表相加(NC40) 先反转链表后相加,再反转结果 注意进位处理和节点创建 时间复杂度O(M+N),空间复杂度O(1) 3️⃣ 字符串相乘(LeetCode 43) 使用数组存储中间结果,避免直接转换 双重循环计算乘积,最后处理进位 时间复杂度O(M*N) 所有解法

GGBond778的博客 1630

SAP-ABAP:SAP MM采购订单增强核心BAdI:IF_EX_ME_PROCESS_PO_CUST 深度解析与最佳实践指南

SAP MM采购订单增强核心BAdI:IF_EX_ME_PROCESS_PO_CUST 关键摘要 核心要点 技术定位:SAP MM模块采购订单处理的核心增强框架,属于第二代BAdI技术,支持多实例并行实现 架构特点: 覆盖采购订单全生命周期(创建/修改/显示) 嵌入ME21N/ME22N/ME23N的标准处理流程 提供字段级、抬头、行项目、账户分配等多层次增强点 关键方法: INITIALIZE:事务初始化时预加载数据 PROCESS_HEADER:处理抬头数据变更 PROCESS_ITEM:处理行项目字段

baidu_35680696的博客 811

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

算法大师! 622

一文搞懂leetcode加法运算

运算公式 sum=x+y+carry; current=sum%10; carry=sum/10;

凯凯王的技术生涯 654

基于Simulink的H∞鲁棒控制器设计与仿真建模示例

本文介绍了基于Simulink的H∞鲁棒控制器设计与仿真方法。针对质量-弹簧-阻尼系统存在±50%刚度不确定性的问题,详细阐述了从构建广义被控对象、设计性能加权函数,到使用hinfsyn综合控制器的完整流程。通过Simulink仿真验证,所设计的H∞控制器在参数摄动和外部扰动下均保持良好性能,位移控制误差小于2%,扰动衰减超过20dB。相比传统PID控制,H∞方法展现出显著鲁棒性优势。文章还总结了工程实践中的加权函数调参技巧、控制器降阶方法,并展望了μ-综合等扩展方向,为处理系统不确定性提供了实用解决方案。

amy_mhd的博客 70

LeetCode 371. 两整数之和(用位运算实现加法)

LeetCode 371. 两整数之和1. 题目:1.1 题目描述:1.2 示例:2. 思路:3. C++代码: 1. 题目: 1.1 题目描述: 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。 1.2 示例: 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = -2, b = 3 输出: 1 2. 思路: ...

weixin_43868032的博客 332

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LeetCode:位运算实现加法

LeetCode:位运算实现加法 写在前面 位运算符 实现加法的思路 两个加数,比如5(101)和6(110),如何不用加法就能得出两者之和呢? 我们知道二进制计算中,如果使用异或将会产生无进位的两者之和,而两数相与将会产生进位值!!! 可这样又如何呢? 1 sum = 011 2 carry =1000 两者继续异或将会产生 结果就出现了,此时无进位,...

weixin_30484739的博客 196

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

自用笔记18——位运算

int getSum(int a, int b){ if(b==0) return a; int sum=a^b; unsigned int carry=(unsigned int)(a&b)<<1; return getSum(sum,carry); } 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a ...

Rye_dt的博客 341

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode 371. 两整数之和(位运算加法)

1. 题目 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = -2, b = 3 输出: 1 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sum-of-two-integers 著作权归领扣网络所有...

Michael是个半路程序员 1628

[Leetcode #371]Sum of Two Integers 不使用加法运算符完成加法运算

程序猿混口饭吃不容易,从今天开始刷题。 原题地址:https://leetcode.com/problems/sum-of-two-integers/ 题目的要求是:不允许使用“+”和“-”运算符,完成加法运算。显然,这题是要考位操作,其实背后就是加法器的实现原理。 要完成这道题,需要涉及下面这两个位操作:“异或”和“与”。 “a异或b”其实就是“相加不进位”,因为1^1是等于0的

爱刷题的博客 484

leetcode371 位运算实现加法

leetcode371位运算实现加法

missing_2009的博客 335

【LeetCode笔记】剑指 Offer 65. 不用加减乘除做加法(Java、位运算、二刷)

文章目录题目描述思路 & 代码 题目描述 讲道理,感觉算有点难度的题目了= =,还是需要时不时看看。 思路 & 代码 正负数情况可以不考虑(补码) 核心:加法 = 进位和 + 非进位和 关于位运算符的选择,leetcode 题解区中 Krahets 大佬的图写很好⬇️ class Solution { // 用递归来做,会很好理解~ // 加法 = 进位和 + 非进位和 // 进位和 = & << ,非进位和 = ^ // 负数考

只能说希望每日一更 236

leetCode 137. 只出现一次的数字 II + 位运算 + 模3加法器 + 真值表(数字电路) + 有限状态机

统计数组中每个元素的出现次数,对于哈希映射中的每个键值对,键表示一个元素,值表示其出现的次数。在统计完成后,遍历哈希映射即可找出只出现一次的元素。这三个状态,但是一个比特位只能表示两个状态,怎么办呢?此时我们可以扩展一个比特,即用两个比特来保存位计数器的三个状态。一样,同样考虑一个比特位的情况,这里需要对这个比特进行计数到 3 时归 0,也就是说需要一个。但是没有现成的加法器,那么需要自己构造一个能位运算的。当前遍历过的所有整数的第 i 位之和除以3的余数。存储当前遍历过的所有整数,当遍历到一个新的整数。

呵呵哒!的博客 1500

加法运算替代LeetCode中等题

给定两个正整数int a,int b,同时给定一个int type代表运算的类型,1为求a * b,0为求a / b,-1为求a - b,但规定只能使用加号,请编写程序返回计算结果,并保证数据合法且结果一定在int范围内。 测试样例: 1,2,1 返回:2 class AddSubstitution { public: int calc(int a, int b, int type) { // write code here int res = 0;

轩玉的博客 260

力扣剑指Offer 第21天 位运算(简单)剑指 Offer 15. 二进制中1的个数 剑指 Offer 65. 不用加减乘除做加法

力扣剑指Offer 第21天 位运算(简单)剑指 Offer 15. 二进制中1的个数 剑指 Offer 65. 不用加减乘除做加法 剑指 Offer 15. 二进制中1的个数 题目 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示

Ctrl_kun的博客 220

Leetcode-刷题-190825-位运算模拟加法

题目描述 题目地址 题目要求不使用加号减号完成加法。考点是位运算中如何模拟加法,在此记录一下。 思路两个整数的异或运算可以得到结果的无进位结果,例如:$4 + 5 = 9 , 4 = (0100)_2 , 5 = (0101)_2 , (0100)_2 \oplus (0101)_2 = (0001)_2$。 接着使用与运算得到整数...

Vaskka的博客 324

力扣 2. 两数相加

两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 来源:力扣(LeetCode) 链接:https:.

yangzijiangtou 1969

面试题65 不用加减乘除做加法(java)

写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 示例: 输入: a = 1, b = 1 输出: 2 提示: a, b 均可能是负数或 0 结果不会溢出 32 位整数 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-z...

weixin_43306331的博客 408
上一篇: 双指针解决两数之和的问题
下一篇: 2022-5-5 每日一题之(乘积小于 K 的子数组)
Bert.King
博客等级 码龄15年 280粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值