leetcode 371. Sum of Two Integers | 371. 两整数之和(补码运算)
题目
https://leetcode.com/problems/sum-of-two-integers/
题解
根据 related topics 可知,本题考察二进制运算。
第一次提交的时候,没想到输入包含负数,于是又调了好久。
既然题目是二进制运算,就借此机会复习一下补码吧。
需要知道:
- 正数的补码 = 其本身
- 负数的补码 = 源码取反 + 1
补码的运算如下,参考:补码加减法运算
class Solution {public int getSum(int a, int b) {int[] binA = toBinary(a);int[] binB = toBinary(b);int[] binSum = addBinary(binA, binB);int res = binToDec(binSum);return res;}// 二进制取反public void negateBinary(int[] arr) {for (int i = 0; i < 32; i++) {arr[i] = 1 - arr[i];}}// 二进制(补码)->十进制public int binToDec(int[] arr) {boolean minus = false;if (arr[31] == 1) { // 若补码符号位为1minus = true;negateBinary(arr); // 取反arr = addBinary(arr, toBinary(1)); // 加1}int sum = 0;for (int i = 0; i < 32; i++) {sum += arr[i] * Math.pow(2, i);}if (minus) sum *= -1;return sum;}// 二进制加法public int[] addBinary(int[] a, int[] b) {int carry = 0;int[] sum = new int[32];for (int i = 0; i < 32; i++) {int t = a[i] + b[i] + carry;carry = t >= 2 ? 1 : 0;sum[i] = t % 2;}return sum;}// 十进制->二进制(补码)public int[] toBinary(int n) {int abs = Math.abs(n);int[] arr = new int[32];int size = 0;while (abs != 0) {arr[size++] = abs % 2;abs /= 2;}if (n < 0) {negateBinary(arr);arr = addBinary(arr, toBinary(1));}return arr;}
}
后来看了评论区,才知道这题真正的考察点,以及一些其他的位运算技巧,可以参考:
A summary: how to use bit manipulation to solve problems easily and efficiently
leetcode 371. Sum of Two Integers | 371. 两整数之和(补码运算)相关推荐
- Leetcode PHP题解--D84 371. Sum of Two Integers
D84 371. Sum of Two Integers 题目链接 371. Sum of Two Integers 题目分析 相加给定的两个数,但不能使用+或-运算符. 思路 可以用二进制的与运算完 ...
- LeetCode 371. 两整数之和(异或操作) / 639. 解码方法 II(动态规划)/ 437. 路径总和 III
371. 两整数之和 2021.9.26 每日一题 题目描述 给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和. 示例 1: 输入:a = 1, b = 2 ...
- LeetCode刷题实战371:两整数之和
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- leetcode 371. 两整数之和
leetcode 371. 两整数之和 不使用运算符 + 和 - ,计算两整数 a .b 之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示 ...
- 371. 两整数之和
1. 题目 不使用运算符 + 和 - ,计算两整数 a .b 之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = - ...
- Leetcode刷题第1题:两数之和(基于Java语言)
** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...
- 不使用 + 和 - 运算符计算两整数之和
问题概述 不使用运算符 + 和 -,计算两整数之和 思考 不使用 + 和 - ,那就只能想到用位运算来处理了.思路如下: 两数进行 ^(异或运算),可以得到两个数在相同位上数值不同的相加结果 两数进行 ...
- leetcode 371. Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Exam ...
- LeetCode 371. 两整数之和(位运算加法)
1. 题目 不使用运算符 + 和 - ,计算两整数 a .b 之和. 示例 1: 输入: a = 1, b = 2 输出: 3示例 2: 输入: a = -2 ...
最新文章
- inputAccessoryView,inputView
- python数据分析的主要流程-python数据挖掘的基本流程有哪些?
- javascript的缓动效果
- 报工提示错误:“没有内部作业价格可被确认”的解决方法
- 2n皇后 - 回溯
- 点击Result list里product ID出现白屏的又一原因及分析
- python 调用bat失败_要想顺利通过Python面试,你最起码需要达到白银段位!
- Android.mk中添加宏定义
- java中的starts_Java Math类静态double nextAfter(double starts,double direction)示例
- oracle imdmp方式导入dmp文件
- 分析网络故障慢慢来!一定要抓到真凶(有关arp)
- Android逆向Unity3D——XXX快跑破解
- SMART原则助你设定有效目标
- 鸿蒙系统适配的电视,搭载鸿蒙系统的荣耀智慧屏电视适配app太少?网友:感觉上当了...
- 作为一个渗透测试学习者必知必读的好书推荐
- 数据类型,栈内存、堆内存
- Openstack-nove
- ecb里使用自定义快捷键切换窗口
- 3d建模网上学习靠谱吗?学3d建模哪个学校好?
- 基于VuePress搭建网站