首页 > 其他分享 >LeetCode题练习与总结:两整数之和--371

LeetCode题练习与总结:两整数之和--371

时间:2024-11-03 23:17:30浏览次数:3  
标签:-- 复杂度 整数 运算符 int 循环 371 LeetCode 进位

一、题目描述

给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。

示例 1:

输入:a = 1, b = 2
输出:3

示例 2:

输入:a = 2, b = 3
输出:5

提示:

  • -1000 <= a, b <= 1000

二、解题思路

这个问题可以通过位运算来解决。位运算中的“与”操作(&)和“异或”操作(^)可以帮助我们实现加法。以下是解题步骤:

  1. 使用“异或”操作(^)计算不带进位的和。异或操作可以理解为不考虑进位的加法操作。
  2. 使用“与”操作(&)然后左移一位(<<)计算进位。如果两个位都是1,那么就会产生进位。
  3. 将不带进位的和与进位相加,重复步骤1和步骤2,直到没有进位为止。
  4. 当进位为0时,不带进位的和就是最终结果。

三、具体代码

class Solution {
    public int getSum(int a, int b) {
        while (b != 0) {
            // 计算不带进位的和
            int temp = a ^ b;
            // 计算进位
            b = (a & b) << 1;
            // 将不带进位的和赋值给a,用于下一轮计算
            a = temp;
        }
        // 当没有进位时,a就是最终结果
        return a;
    }
}

这段代码通过循环不断地计算不带进位的和以及进位,直到没有进位为止,最后返回的结果即为两数之和。

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 该算法包含一个循环,循环的次数取决于进位(b)的次数。
  • 在最坏的情况下,如果 a 和 b 都是最大值(例如 1000),进位可能会发生多次,但是因为 b 是在每次迭代中被更新为进位后的值,所以进位发生的次数是有限的。
  • 每一次循环都会至少减少一个进位(即 b 中的一个最高位的1),因此循环次数最多为 a 和 b 中最高位1的位置数,这个数字通常远小于 a 和 b 的位数。
  • 假设 a 和 b 都是 32 位整数,那么循环最多执行 32 次(即每个位上都有进位)。

因此,时间复杂度是 O(1),因为循环的次数是常数级别的,不随输入规模变化。

2. 空间复杂度
  • 该算法只使用了固定数量的额外空间,即 temp 变量和 b 的更新值。
  • 这些变量都是整数类型,占用的空间是常数级别的。

因此,空间复杂度也是 O(1),因为无论输入规模如何,算法使用的额外空间都不会改变。

五、总结知识点

  • 位运算符

    • 异或运算符(^):用于计算不带进位的和。如果两个位不相同,则结果为1;如果相同,则结果为0。
    • 与运算符(&):用于找出哪些位会进位。如果两个位都是1,则结果为1,表示需要进位;否则结果为0。
    • 左移运算符(<<):用于将进位左移一位,以便在下一次迭代中加到不带进位的和上。
  • 循环控制

    • while循环:用于重复执行位运算操作,直到没有进位为止(即 b 等于0)。
  • 整数类型

    • 使用 int 类型来存储整数,这是Java中的基本数据类型之一,用于表示32位的有符号整数。
  • 变量赋值

    • 使用赋值运算符(=)来更新变量 a 和 b 的值。
  • 逻辑运算

    • 使用 != 运算符来检查 b 是否不等于0,这是循环的继续条件。
  • 函数返回值

    • 使用 return 语句来返回最终的计算结果。
  • 算法思想

    • 使用位运算来模拟加法操作,这是解决不使用加号实现加法问题的核心思想。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

标签:--,复杂度,整数,运算符,int,循环,371,LeetCode,进位
From: https://blog.csdn.net/weixin_62860386/article/details/143414263

相关文章

  • LeetCode题练习与总结:超级次方--372
    一、题目描述你的任务是计算 a^b 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。示例1:输入:a=2,b=[3]输出:8示例2:输入:a=2,b=[1,0]输出:1024示例3:输入:a=1,b=[4,3,3,8,5,2]输出:1示例4:输入:a=2147483647,b=[2,......
  • 听说你要WPS办公软件?自取。
    前言听说有小伙伴都没有Office软件,哦豁,小白这不就来了嘛?其实小白是分享了很多好资源的,只是你不知道怎么找?资源获取一常用软件链接一:https://pan.xunlei.com/s/VOAmXWfXtkjA9A1wN0h5g6HGA1?pwd=d72m#链接二:https://pan.quark.cn/s/558930521ce3这里只截取了部分截图,常......
  • 【Google Cloud】专用 Google 访问通道的组成和利用方法详解
    专用Google访问通道(PrivateGoogleAccess)允许从没有外部IP的虚拟机访问GoogleCloud服务的API。本文将详细介绍此功能。什么是专用Google访问通道专用Google访问通道(PrivateGoogleAccess)是指在GoogleCloud(原称GCP)中,允许没有外部IP(公网IP)的虚拟机或本地......
  • 微服务设计模式:节流模式(Throttling Pattern)
    微服务设计模式:节流模式(ThrottlingPattern)定义节流模式(ThrottlingPattern)是一种控制资源使用速率的设计模式,广泛应用于云计算和微服务架构中,以防止服务过载和资源耗尽。它通过限制客户端请求的数量,保证系统稳定性和可用性。结构节流模式的核心组件包括:请求过滤器:拦......
  • netstat命令
    netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。如果计算机有时候接收到的数据报导致出错数据或故障,不必感到奇怪,TCP/IP可......
  • harbor 使用https部署 与 docker 登录
    目录配置harbor证书1.生成证书颁发机构证书及私钥2.生成服务器私钥及证书签名请求(CSR)3.生成证书签名请求4.生成x509v3扩展文件。5.使用该v3.ext文件为Harbor服务器生成证书。6.将test.harbor.com.crt转换为test.harbor.com.cert,供Docker使用。Docker守护进程将.crt......
  • 2024-2025-1 20241428张雄一《计算机基础与程序设计》第六周工作总结
    学期(如2024-2025-1)学号(如:20241428)《计算机基础与程序设计》第6周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业的目标<写上具体方面>作业正文https://i.cnblogs.com/posts/edit教材学习内容总结时间复杂度......
  • 2024-2025-1 20241304 《计算机基础与程序设计》第6周学习总结
    2024-2025-120241304《计算机基础与程序设计》第6周学习总结作业信息|这个作业属于哪个课程|<[2024-2025-1-计算机基础与程序设计](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05)|>|-- |-- ||这个作业要求在哪里|<作业要求的链接>(如2024-2025-1计算机基础与程序设......