首页 > 其他分享 >leetcode2235 两整数相加

leetcode2235 两整数相加

时间:2023-08-19 17:22:38浏览次数:44  
标签:num1 num2 int 相加 整数 010 011 001 leetcode2235

题目描述:(这第一种方法我就不多说了,肯定是有手就行)

给你两个整数 num1 和 num2,返回这两个整数的和。

示例 1:

输入:num1 = 12, num2 = 5
输出:17
解释:num1 是 12,num2 是 5 ,它们的和是 12 + 5 = 17 ,因此返回 17 。
示例 2:

输入:num1 = -10, num2 = 4
输出:-6
解释:num1 + num2 = -6 ,因此返回 -6 。

第一种

class Solution {
    public int sum(int num1, int num2) {
        return num1+num2;
    }
}

让我们来看看第二种方法

位运算

class Solution {
    public int sum(int num1, int num2) {
        while (num2 != 0) {
            int carry = (num1 & num2) << 1;
            num1 ^= num2;
            num2 = carry;
        }
        return num1;
    }
}

老样子,贴上作者的链接作者ylb
然后分析分析:

首先就是位运算符这个 ^ 这里,和左神学过这个印象还算比较深,我就简单的举个例子供自己和大家理解(b站左神视频下面的例子,就直接引用了)
a=1;
b=2;
c=a^b; // c为1和2的异或数3
a=a^c; // 1^3等于2,a变为2
b=b^c; // 2^3等于1,b变为1
完成互换。

简化后:
a=1;
b=2;
a=a^b; // a为1和2的异或数3
b=a^b; // 3^2等于1,b变为1
a=a^b; // 3^1等于2,a变为2

还有换成二进制的理解方法
1= 001;2=010;3=011;
a=1;//001
b=2;//010
c=a^b; //001 和 010 的异或数 011
b=c^b; //011 和 010 的亦或数 001
a=c^b; //011 和 001 的亦或数 010

嗯,这样我们就都懂了这个操作是什么意思了
num1 ^= num2;
num2 = carry;

接下来为了方便理解,我们可以再举个例子
假设
num1=5 //101
num2=3 //011
carry = (num1 & num2) << 1; //carry = (101 & 011) << 1 = 001 << 1 = 101 = 2

num1 ^= num2 // num1 = num1 ^ num2 = 5 ^ 3 = 101 ^ 011 = 110 = 6
num2 = carry = 101 = 2

这是题解下面的一句话 return num2 ? sum(num1^num2, (num1&num2)<<1) : num1;
也是题解之一,不知道你们看没看懂啊,意思和上面的应该是一样的。
在纸上画画应该比较好懂,我想明白再补。

标签:num1,num2,int,相加,整数,010,011,001,leetcode2235
From: https://www.cnblogs.com/benfang/p/17642744.html

相关文章

  • Python练习:输入一个整数,输出该数二进制表示中1的个数。
      Python3整数对象存储为无符号数加上符号位标志,所以不存在“负数”补码形式,因此,计算“1”的数量需要按去符号后的无符号数:cnt=bin(n).count('1')另外,Python3无长整,整数长度原则上不限,所以不能以假定的32位处理。    补码+原码=2**321#-*-coding:ut......
  • 剑指 Offer 16. 数值的整数次方(中等)
    题目classSolution{public:doubletraversal(doublex,intn){if(n==0)return1.00000;doubley=traversal(x,n/2);//本题需要对递归时的指数进行二分法,否则超时。returnn%2==0?y*y:y*y*x;//y=(x^4)。n=8,则x^8=y*y;n......
  • 【题解】#119. 最大整数 题解(2023-07-12更新)
    #119.最大整数题解本文章的访问次数为次。Part1提示题目传送门欢迎大家指出错误并私信这个蒟蒻欢迎大家在下方评论区写出自己的疑问(记得@这个蒟蒻)本文已同步至学校网站、博客园。Part2背景本来是不想写这篇题解的,但是由于卡了这个蒟蒻\(1\)整天,故此纪念。Par......
  • 8.18-零件出图(水路出图-线割出图)-顶出距离=产品最深胶位+15 ( 相加不满20设置为20 )
    上下顺序是:零件出图-水路出图-线割出图  ......
  • 《剑指Offer》-16-数值的整数次方
    将n次相乘的幂运算转化为log2N次平方运算,并且采用递归算法原书给出的最优算法本身不处理负数,是外层函数处理的 doublemyPow(doublex,intn){ doubleres=pow(x,abs(n)); if(n<0)res=1/res; returnres; } doublepow(doublex,intn){ if(n==......
  • 整数划分问题(完全背包)(总方案数和最小方案数)
    完全背包解决整数划分问题:总方案数:完全背包:在前i个数中选,且总和恰好等于j的方案数f[i][j]=f[i-1][j]+f[i-1][j-v]化成一维:f[j]+=f[j-v];这种求总方案数的情况需要把f初始化为0,然后f[0]初始化为1,最后累加f[j]900.整数划分这里从小到大枚举i,用到的v就是枚举......
  • 将整数转换为两个无零整数的和
    「无零整数」是十进制表示中不含任何0的正整数。给你一个整数n,请你返回一个由两个整数组成的列表[A,B],满足:A和B都是无零整数A+B=n题目数据保证至少有一个有效的解决方案。如果存在多个有效解决方案,你可以返回其中任意一个。示例1:输入:n=2输出:[1,1]解释:A......
  • 2. 两数相加
    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0 开头。 示例1:输入:l1=[2,4,3],l2=[5,6,4]输出......
  • 盘点一个列表相加的Python基础题目
    大家好,我是皮皮。一、前言前几天在明佬的Python群【dq】问了一个Python列表基础处理的问题,一起来看看吧。下图是他的原始列表,想通过左边的列表,得到右边的合并列表。二、实现过程这里【流水线】和【hclw】大佬给了一个答案,如下图所示:如此顺利地解决了粉丝的问题。后来他自己也写了个......
  • 内存受限下找出亿级整数集合中的不重复元素
    在大数据环境下,我们常常需要处理数量极其庞大的数据集,但由于内存大小的限制,无法直接加载到内存中进行操作。这时就需要设计适合内存受限环境的算法,来解决问题。本文将以在内存不足的情况下,找出亿级规模整数集合中的不重复元素为例,探讨一种基于BloomFilter的数据结构的解决方......