leetcode371. 两整数之和,位运算

news2024/11/27 7:08:46

leetcode371. 两整数之和

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

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

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

提示:
-1000 <= a, b <= 1000

在这里插入图片描述

目录

    • leetcode371. 两整数之和
    • 题目分析
    • 算法思路的深入探讨
      • 异或运算(XOR)
      • 与运算(AND)和左移(<<)
      • 逻辑电路的联系
    • 算法步骤
    • 算法流程
    • 具体代码
    • 算法分析
    • 相似题目

题目分析

实现一个函数,计算两个整数 ab 的和,但不允许使用加法运算符 + 和减法运算符 -。这个问题可以通过位运算来解决,利用异或运算符 ^ 和与运算符 & 来实现加法。

算法思路的深入探讨

这个问题的核心在于如何通过位运算实现加法。这实际上与计算机中的逻辑电路设计紧密相关。在计算机中,加法是通过一系列的位运算来实现的,特别是异或(XOR)和与(AND)运算。

异或运算(XOR)

异或运算有一个很有趣的性质:任何数与自身进行异或运算,结果都是0;任何数与0进行异或运算,结果都是它本身。这使得异或运算非常适合用来计算不带进位的加法部分。

与运算(AND)和左移(<<)

与运算可以用来找出两个数在对应位上的公共部分,即它们的进位。左移运算则可以将这个进位向左移动一位,为下一次加法运算做准备。

逻辑电路的联系

这种位运算的加法方法与逻辑电路中的半加器和全加器的设计非常相似。半加器能够计算两个输入的加法,但不包括进位;全加器则能够计算两个输入的加法,并包括进位。

算法步骤

  1. 初始化一个变量 carry 为0,用于存储进位。
  2. b 不等于0时,进行循环:
    • 计算 ab 的按位与,然后左移一位,得到进位 carry
    • 计算 ab 的异或,得到没有进位的和。
    • 更新 bcarrya 为没有进位的和。
  3. 返回 a 作为最终结果。

算法流程

开始
初始化carry为0
b是否等于0
返回a
计算a&b的按位与然后左移一位得到carry
计算a^b得到没有进位的和
更新a为没有进位的和
更新b为carry

具体代码

class Solution {
public:
    int getSum(int a, int b) {
    while(b!=0)
    {
        unsigned int carry=((unsigned)(a&b))<<1;
        a=a^b;
        b=carry;
    }
    return a;
    }
};

算法分析

  • 时间复杂度: O(log(max_int)),其中我们将执行位运算视作原子操作。
  • 空间复杂度: O(1),因为只需要常数级别的额外空间。
  • 易错点: 需要注意整数溢出的问题,特别是在计算进位时,需要将结果转换为无符号整数进行左移。

相似题目

题目链接
371. 两整数之和https://leetcode.cn/problems/sum-of-two-integers/
67. 二进制求和https://leetcode.cn/problems/add-binary/
415. 字符串相加https://leetcode.cn/problems/add-strings/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Axure高保真原型】中继器表格——标签使用情况案例

今天和大家分享中继器表格——标签使用情况案例的原型模板&#xff0c;效果包括&#xff1a; 模糊搜索——输入标签编号或者标签名称&#xff0c;可以快速查找对应的数据 排序——点击排序按钮&#xff0c;可以按升序或降序排列 分页——点击上拉列表&#xff0c;可以选择表格…

gpu压力测试工具----gpu_burn的使用

背景&#xff1a; 我们平时想做gpu的压力测试&#xff0c;需要一个简单的可以一键执行的工具来测试&#xff0c;主要要来打满gpu的使用率和显存&#xff0c;这里以8卡4090机器为测试机&#xff0c;驱动版本550.54.14&#xff0c;cuda版本12.3。 开源方案&#xff1a; gpu-burn一…

oauth2.0学习

一、授权码模式 时序图 1、用户访问第三方服务&#xff0c;如果用到需要授权服务提供授权的资源&#xff0c;第三方服务生成获取授权码请求&#xff08;附带回调地址和用户在授权服务的确认身份的信息&#xff09;并页面发起请求 2、第三方授权服务根据请求生成对应的登录地址…

c++ 谷歌的招聘 题解

题目描述 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘 内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 1010 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字 能找出这个素数的人,就可以通过访问谷歌的这个网站进…

MySQL 亿级数据平滑迁移实战

作者&#xff1a;来自 vivo 互联网服务器团队- Li Gang 本文介绍了一次 MySQL 数据迁移的流程&#xff0c;通过方案选型、业务改造、双写迁移最终实现了亿级数据的迁移。 一、背景 预约业务是 vivo 游戏中心的重要业务之一。由于历史原因&#xff0c;预约业务数据表与其他业务…

springcloud集成seata实现分布式事务

Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 官网&#xff1a;Apache Seata 文章目录 一、部署1.下载2.修改配置&#xff0c;nacos作注册中心&#xff0c;db存储 二、集成到springcloud项目1.引入依赖2.修改…

go设计模式——单例模式

概念 单例是一种创建型设计模式&#xff0c;它确保一个类在整个程序运行期间只有一个实例&#xff0c;并提供一个全局访问点来使用该实例。虽然单例模式在某些情况下非常有用&#xff0c;例如管理全局配置、日志记录或资源共享&#xff0c;但它也带来了与全局变量相似的问题。…

【CSS】什么是1px问题,前端如何去解决它,如何画出0.5px边框?

1px 问题概述 在移动端开发中&#xff0c;1px 的边框在高 DPI 屏幕上可能会显得过粗&#xff0c;这是因为移动设备的像素密度&#xff08;DPI&#xff09;通常比传统的计算机屏幕高。在高 DPI 屏幕上&#xff0c;1px 实际上可能会被渲染为 2px 或更多&#xff0c;这使得边框看…

华为手机换ip地址怎么换?手机换ip地址有什么影响

在数字化时代&#xff0c;网络已成为我们生活中不可或缺的一部分。无论是日常沟通、工作学习还是娱乐休闲&#xff0c;我们都离不开互联网。然而&#xff0c;随着网络安全问题的日益突出&#xff0c;如何保护个人隐私和信息安全成为了用户关注的焦点。更换手机IP地址作为提升网…

Vue3+Vite 解决“找不到模块“@/components/xxx.vue”或其相应的类型声明 ts(2307)”

1. 安装插件 pnpm i types/node -D2. 修改vite.config.ts文件 import path from path;resolve: {alias: {"": path.resolve(__dirname,"./src"),},},3. 修改tsconfig.app.json文件 别人教的都是修改tsconfig.json文件&#xff0c;但是我发现可能是因为版…

NVF04M录音芯片在宠物喂食器的应用:录音播放功能,内置SPI闪存

在现代社会中&#xff0c;宠物已经成为人们生活中的一部分&#xff0c;而宠物喂食器作为宠物养护的重要工具&#xff0c;也越来越受到人们的关注。为了满足人们对宠物喂食器的多样化需求&#xff0c;九芯电子供应商研发了一款NVF04M录音芯片。它在宠物喂食器中的作用主要是提供…

巧用PDF转Markdown插件,在扣子(Coze)手搓一个有趣好玩的AI Bot

近期&#xff0c;TextIn团队开发的PDF转Markdown插件已经上架Coze平台。 短短的时间内&#xff0c;已经有不少朋友愉快地和我们的工具开始玩耍。今天我们抛砖引玉&#xff0c;介&#xff08;an&#xff09;绍&#xff08;li&#xff09;几种PDF转Markdown插件的有趣玩法&#…

通用情商智商性格测试ACCESS\EXCEL数据库

今天这个数据库记录数不太多&#xff0c;是个可以进行智商和情商测试的数据&#xff0c;也可以体验比较有趣的测试体验&#xff0c;整个测试主要是以回答不同方面的问题来分析的。智商测试和情商测试均采用国际标准试题&#xff0c;采用国际标准测试题目&#xff0c;通过回答不…

多模态模型评测框架lmms-eval发布!全面覆盖,低成本,零污染

随着大模型研究的深入&#xff0c;如何将其推广到更多的模态上已经成为了学术界和产业界的热点。最近发布的闭源大模型如 GPT-4o、Claude 3.5 等都已经具备了超强的图像理解能力&#xff0c;LLaVA-NeXT、MiniCPM、InternVL 等开源领域模型也展现出了越来越接近闭源的性能。 在…

NSSM 注册exe服务

参考链接&#xff1a;https://www.cnblogs.com/magicMaQaQ/p/18174409 下载NSSM&#xff1a;[NSSM - the Non-Sucking Service Manager](NSSM - the Non-Sucking Service Manager) 解压得到的压缩包 使用管理员权限运行 cmd&#xff0c;来到解压后的目录&#xff0c;执行nssm…

信息学奥赛知识点(十二)----栈和队列

一、栈 栈是只能在某一端插入和删除的特殊线性表。 用桶堆积物品&#xff0c;先堆进行的压在底下&#xff0c;随后一件一件往上堆。取走时&#xff0c;只能从上面一件一件取。堆和取都在顶部进行。底部一般是不动的。 栈就是一种类似桶堆积物品的数据结构&#xff0c;进行删…

Go 1.23 新特性:Timer 和 Ticker 的重要优化

作者&#xff1a;陈明勇 个人网站&#xff1a;https://chenmingyong.cn 文章持续更新&#xff0c;如果本文能让您有所收获&#xff0c;欢迎点赞收藏加关注本号。 微信阅读可搜《程序员陈明勇》。 这篇文章已被收录于 Github&#xff0c;欢迎大 家Star 催更并持续关注。 前言 G…

js 实现对一个元素得拉伸

前言&#xff1a; 最近写一个项目遇到了需要拉伸调整一个元素得大小&#xff08;宽高&#xff09;。所以打算实现一下。 思路就是用 mousedown、mousemove、mouseup 来实现。 mousemove是动态获取坐标&#xff0c;然后 动态改变元素宽度 js自己实现&#xff1a; html里实现…

CentOS7发送邮件如何配置SMTP服务器发信?

CentOS7发送邮件安全设置&#xff1f;CentOS7发信性能优化方法&#xff1f; 对于使用CentOS7操作系统的用户而言&#xff0c;配置SMTP服务器以发送邮件是一个关键步骤。AokSend将详细介绍如何在CentOS7中配置SMTP服务器发信的方法和注意事项。 CentOS7发送邮件&#xff1a;准…

C#发邮件时如何确保邮件内容的安全和隐私?

C#发邮件性能优化的策略&#xff1f;如何设置C#发邮件的功能&#xff1f; 在使用C#发邮件时&#xff0c;如何确保邮件内容不被泄露、篡改或非法访问&#xff0c;已成为开发者需要面对的关键问题。AokSend将探讨在C#发邮件过程中&#xff0c;确保邮件内容安全和隐私的几种有效方…