(其他) 剑指 Offer 65. 不用加减乘除做加法 ——【Leetcode每日一题】

news2025/2/25 2:24:03

❓ 剑指 Offer 65. 不用加减乘除做加法

难度:简单

写一个函数,求两个整数之和,要求在函数体内不得使用 “+”“-”“*”“/” 四则运算符号。

示例:

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

提示

  • a, b 均可能是负数或 0
  • 结果不会溢出 32 位整数

💡思路:位运算

预备知识 —— 一篇文章搞懂位运算!!!

有符号整数通常用补码来表示和存储,补码具有如下特征:

  • 正整数的补码与原码相同;
  • 负整数的补码为其原码除符号位外的所有位取反后加 1。
  • 可以将减法运算转化为补码的加法运算来实现。
  • 符号位数值位 可以一起参与运算。

a ^ b 表示没有考虑进位的情况下两数的和,(a & b) << 1 就是进位。

递归会终止的原因是 (a & b) << 1 最右边会多一个 0,那么继续递归,进位最右边的 0 会慢慢增多,最后进位会变为 0,递归终止。

递归可以转换为迭代,从而减少空间复杂度!

🍁代码:(C++、Java)

法一:递归
C++

class Solution {
public:
    int add(int a, int b) {
         return b == 0 ? a : add(a ^ b, (a & b) << 1);
    }
};

Java

class Solution {
    public int add(int a, int b) {
         return b == 0 ? a : add(a ^ b, (a & b) << 1);
    }
}

法二:迭代
C++

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

Java

class Solution {
    public int add(int a, int b) {
        while(b != 0){
            int tmp = a ^ b;
            b = (a & b) << 1;
            a = tmp;
        }
        return a;
    }
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( l o g ⁡ ( m a x i n t ) ) O(log⁡(max_int)) O(log(maxint)),其中我们将执行位运算视作原子操作。。
  • 空间复杂度 O ( 1 ) O(1) O(1),迭代。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

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

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

相关文章

在 Windows 上远程对 Linux 进行抓包

文章目录 名词解释事先准备下载安装 Wireshark下载运行 libpcap设置 libpcap 环境变量在 Wireshark 中远程连接 libpcap 笔者的运行环境&#xff1a;&#xff08;成功&#xff09; 本地客户端&#xff1a; Windows&#xff1a; Windows 10 教育版&#xff08;本文&#xff09; …

基于STM32设计的生理监测装置

一、项目功能要求 设计并制作一个生理监测装置&#xff0c;能够实时监测人体的心电图、呼吸和温度&#xff0c;并在LCD液晶显示屏上显示相关数据。 随着现代生活节奏的加快和环境的变化&#xff0c;人们对身体健康的关注程度越来越高。为了及时掌握自身的生理状况&#xff0c…

Hololens2部署很慢可能是unity工程选择不对

这样就很快&#xff0c;几分钟就完成了。&#xff08;虽然又遇到新问题了&#xff09; 第一次使用时如下&#xff0c;直接运行了一个多小时还没有完

虚拟专用网络——VPN

VPN的英文全称是"Virtual Private Network"&#xff0c;意为"虚拟专用网络"。它的本质是一种特殊的加密通讯协议&#xff0c;可以在不同地点的企业内部网之间建立一条专用的通讯线路&#xff0c;就像真正铺设了一条专线一样&#xff0c;但无需真正的物理线…

【图卷积神经网络】1-入门篇:为什么使用图神经网络

在本节中,将涵盖以下主要内容: 为什么使用图?为什么学习图?为什么使用图神经网络?为什么使用图? 首先需要回答的问题是:为什么对图感兴趣?图论是对图进行数学研究的学科,它已经成为理解复杂系统和关系的基本工具。图是一种将节点(也称为顶点)和连接这些节点的边的集…

go语言的高级特性

go语言调用C语言 go tool cgo main.go

MySQL误删数据 回滚

前言 生产环境数据库不允许删除表&#xff0c;可以将表修改成 XXX_to_delete 如果误删简单数据&#xff0c;可以考虑使用binlog恢复 一、查看命令 1.查看binlog是否开启 show variables like log_bin;切换到MySQL安装目录,查看mysqlbinlog日志文件 2.查看所有 binlog 日志…

网络技术学习十二:子网划分

子网划分 A类地址 ⑴ A类地址第1字节为网络地址&#xff0c;其它3个字节为主机地址。另外第1个字节的最高位固定为0。 ⑵ A类地址范围&#xff1a;1.0.0.1到126.255.255.254。 ⑶ A类地址中的私有地址和保留地址&#xff1a; ①10.0.0.0到10.255.255.255是私有地址&#xff0…

AIGC - 生成模型及其应用

AIGC - 生成模型及其应用 0. 前言1. 生成模型2. 生成模型与判别模型的区别2.1 模型对比2.2 条件生成模型2.3 生成模型的发展2.4 生成模型与人工智能 3. 生成模型示例3.1 简单示例3.2 生成模型框架 4. 表示学习5. 生成模型与概率论6. 生成模型分类小结 0. 前言 生成式人工智能 …

知识大杂烩(uniapp)

首先声明&#xff1a;不敢保证都管用&#xff0c;这是我自己实践得来的。 box-shadow: 这段 CSS 样式代码用于创建一个阴影效果&#xff0c;它是通过 box-shadow 属性来实现的。让我解释一下这段代码的含义&#xff1a; - box-shadow: 这是 CSS 的属性&#xff0c;用于添加阴影…

vue.js+nodejs家庭个人理财收支管理系统5x6nf

本收支管理系统以vue.js作为框架&#xff0c;nodejs语言&#xff0c;B/S模式以及MySql作为后台运行的数据库。本系统主要包括以下功能模块&#xff1a;用户管理、收入分类、支出分类、每日收入、每日支出等模块。 本文的组织结构如下&#xff1a; 1、绪论。综述了本文的研究背景…

Python之线性数据结构

Python之线性数据结构 线性数据结构 线性表 线性表(简称表)&#xff0c;是一种抽象的数学概念&#xff0c;是一组元素的序列的抽象&#xff0c;它由有穷个元素组成(0 个或任意个)顺序表:使用一大块连续的内存顺序存储表中的元素&#xff0c;这样实现的表称为顺序表&#xff…

优惠来袭,工业树莓派特惠季火爆进行中

为回馈各位新老用户一直以来的支持和信任&#xff0c;虹科工业树莓派特惠季强势来袭&#xff01;9月1日至12月31日期间&#xff0c;订购虹科工业树莓派RevPi Core S或RevPi Connect S型号产品&#xff0c;满足活动条件即可享超值优惠折扣&#xff01;详细活动可扫描海报下方二维…

CSS 的 Float

文档流 将窗体自上而下分成一行一行&#xff0c;并在每行中按从左至右的挨次排放元素&#xff0c;即为文档流。 文档流是 HTML 页面的底层结构&#xff0c;HTML 页面创建的元素默认都在文档流中。 块级元素 块级元素在文档流中自上向下排列&#xff08;垂直方向排列&#xf…

2023年非证券类投资银行业发展报告

第一章 行业概况 非证券投资银行业是一个专门为公司、政府和高净值个人提供金融服务的行业&#xff0c;与传统的证券投资银行不同&#xff0c;其主要业务不涉及证券交易&#xff0c;而是注重为客户提供咨询服务、融资和投资管理等服务。 非证券投资银行通常涉及的业务领域包括…

电脑同时连接有线和无线网络怎么设置网络的优先级

电脑同时连接有线和无线网络怎么设置网络的优先级&#xff1a; 我们知道在 笔记本电脑系统 中&#xff0c;可以通过有线或无线网络进行联网。如果电脑在有线网络和无线网络同时存在的情况&#xff0c;应该怎么设置有线网络优先连接呢?对此我们提供下面的方法可以让电脑在有Wi…

【ES】笔记-Class类剖析

Class Class介绍与初体验ES5 通过构造函数实例化对象ES6 通过Class中的constructor实列化对象 Class 静态成员实例对象与函数对象的属性不相通实例对象与函数对象原型上的属性是相通的Class中对于static 标注的对象和方法不属于实列对象&#xff0c;属于类。 ES5构造函数继承Cl…

力扣373. 查找和最小的 K 对数字 优先队列法

题目 给定两个以 非递减顺序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 示例 1: 输入: nums1 [1,7,11], …

BFGS算法python实现

文章目录 Python代码当前参数下求解结果参数设置 Python代码 import scipy import numpy as np import matplotlib.pyplot as plt from scipy.optimize import minimize def func(x):return 7*np.sin(x) 11*np.cos(5*x) def cal_func():x np.linspace(-5,5,1000)y func(x)r…

【电压质量】提高隔离电源系统的电压质量(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…