Carry bit

  • 这题搞懂了才算真正理解carrry bit!!!多练

  • 当前取A[i] 和B[j]相乘,那么结果只有可能影响第i+j和i+j+1位

  • 现在把i+j设成高位,high = i +j, i+j+1设成低位,low = i+j+1

  • product = nnum1[i] * num2[j]

  • tmp = product + res[i+j+1];

  • res[i+j+1] = tmp % 10;

  • res[i+j] = tmp/10 + res[i+j];

  • 最后要找到第一个non-zero number也有点小技巧if(sb.length() == 0 && i == 0)

  • 这题还要注意"0" * "0"的 corner case

Add Binary

  • 一开始想到的就是最标准的分情况讨论

  • 首先是末位< 9的话加完就直接返回

  • 然后走一个while loop,只要carry == 0或者i < 0就停止

  • 最后判断carry bit == 1的情况

  • 写出来代码巨长巨丑,只打败2%

  • 不用说肯定有优化的方法,于是看到了这个巧妙的方法!

  • 直接走一个loop,每次判断当前值digits[i]< 9, 直接digits[i] ++return digits

  • 如果digits[i]>= 9,那么直接digits[i] = 0,妙处就在这里!仔细想想,如果能走到非最低位,肯定说明前一位有进位,所以其实这种情况下就并不是只有最低位plus one,而是可以想象成每一位都plus one!

  • 最后如果是自然跳出了for-loop并且还没return的话只有可能是"999"的情况了,都不需要check if else, 直接看一个新数组int[] res = new int[n+1], res[0] = 1, then return res

Last updated

Was this helpful?