题目

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. 两整数之和(补码运算)相关推荐

  1. Leetcode PHP题解--D84 371. Sum of Two Integers

    D84 371. Sum of Two Integers 题目链接 371. Sum of Two Integers 题目分析 相加给定的两个数,但不能使用+或-运算符. 思路 可以用二进制的与运算完 ...

  2. LeetCode 371. 两整数之和(异或操作) / 639. 解码方法 II(动态规划)/ 437. 路径总和 III

    371. 两整数之和 2021.9.26 每日一题 题目描述 给你两个整数 a 和 b ,不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和. 示例 1: 输入:a = 1, b = 2 ...

  3. ​LeetCode刷题实战371:两整数之和

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. leetcode 371. 两整数之和

    leetcode 371. 两整数之和 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示 ...

  5. 371. 两整数之和

    1. 题目 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = - ...

  6. Leetcode刷题第1题:两数之和(基于Java语言)

    ** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...

  7. 不使用 + 和 - 运算符计算两整数之和

    问题概述 不使用运算符 + 和 -,计算两整数之和 思考 不使用 + 和 - ,那就只能想到用位运算来处理了.思路如下: 两数进行 ^(异或运算),可以得到两个数在相同位上数值不同的相加结果 两数进行 ...

  8. 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 ...

  9. LeetCode 371. 两整数之和(位运算加法)

    1. 题目 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3示例 2: 输入: a = -2 ...

最新文章

  1. inputAccessoryView,inputView
  2. python数据分析的主要流程-python数据挖掘的基本流程有哪些?
  3. javascript的缓动效果
  4. 报工提示错误:“没有内部作业价格可被确认”的解决方法
  5. 2n皇后 - 回溯
  6. 点击Result list里product ID出现白屏的又一原因及分析
  7. python 调用bat失败_要想顺利通过Python面试,你最起码需要达到白银段位!
  8. Android.mk中添加宏定义
  9. java中的starts_Java Math类静态double nextAfter(double starts,double direction)示例
  10. oracle imdmp方式导入dmp文件
  11. 分析网络故障慢慢来!一定要抓到真凶(有关arp)
  12. Android逆向Unity3D——XXX快跑破解
  13. SMART原则助你设定有效目标
  14. 鸿蒙系统适配的电视,搭载鸿蒙系统的荣耀智慧屏电视适配app太少?网友:感觉上当了...
  15. 作为一个渗透测试学习者必知必读的好书推荐
  16. 数据类型,栈内存、堆内存
  17. Openstack-nove
  18. ecb里使用自定义快捷键切换窗口
  19. 3d建模网上学习靠谱吗?学3d建模哪个学校好?
  20. 基于VuePress搭建网站

热门文章

  1. CodeForces - 1326E Bombs(线段树+思维)
  2. TIS教程04-客户端
  3. Jupyter Notebook导入自定义模块
  4. css div里引用em字体会变斜体_前端开发中7种必要了解的CSS长度单位
  5. delphi中的ParamStr
  6. (七)boost库之单例类
  7. 3_7 MementoMode 备忘录模式
  8. python练习12
  9. 后端不哭!最新优化性能经验分享来啦
  10. 旋转排序数组系列题详解