zoukankan      html  css  js  c++  java
  • 371. Sum of Two Integers

    Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

    Example 1:

    Input: a = 1, b = 2
    Output: 3
    

    Example 2:

    Input: a = -2, b = 3
    Output: 1

    "思路:
    1、把运算分为两部分,第一部分只计算那些对应位相加,能够产生进位的位所产生的进位(所以采用异或运算),第二部分只计算那些对应位相加,不可以产生进位的位的运算结果((1,0),(0,1)(0,0)是要处理的情况,所以采用与运算(因为与运算不进位,也就是排除掉了对应位都是1的情况))。然后判断一下第一部分(即是否有对应位可以产生进位)的值是否为0,如果是0,那么直接返回第二部分的值(异或的结果正好是适合无进位情况的),如果不是0(需要把进位加上),然后把第一部分左移一位(因为他们是进位,此前并未左移)与第二部分相加就得到了总的结果,因为又是加法,然后就可以再次调用这个函数计算,直至进位是0。我想的是运算不会溢出,嘿嘿
    2、异或运算和与运算的作用
    (1)与运算 只关注于对应位相加时可以产生进位的情况,即(都是1)
    (2)异或运算 只关注于对应位相加时不会产生进位的情况,而且与运算是没有进位的,所以排除了异或运算负责的情况,(1,0),(0,1)。"

     https://leetcode.com/problems/sum-of-two-integers/discuss/167728

    class Solution {
        public int getSum(int a, int b) {
            return b == 0 ? a : getSum(a ^ b, (a & b) << 1);    
        }
    }
  • 相关阅读:
    ORACLE修改列名与列类型
    ORACLE的显式游标与隐式游标
    ORACLE 异常错误处理
    ORACLE的强制索引
    看懂ORACLE执行计划
    ORACLE建立物化视图
    普通视图和物化视图的区别
    ORACLE 中 TRANSLATE的用法
    随手小代码——归并排序
    随手小代码——选择算法排序
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11824346.html
Copyright © 2011-2022 走看看