[算法]a + b——LintCode01

题目链接,没必要,就是a + b

不过发现了竟然除了力扣还有个领扣,233333,一查还蛮久的,看来是我孤陋寡闻了

本来想拿go练练手的,结果发现连基础的50题还有蛮多问题= =,就是那种语法熟练度跟不上思想的那种感觉 QAQ

一定是go的语法太反人类惹

思路

a + b还能有什么思路,return a + b就完事了嗷

然后我看到下面的一句:试着不使用+号完成。。。

我下意识得联想到那些与或非异或的运算符,然后上床趴了许久,想不出 :lei:

然后一查,噢,我只想出异或是二进制相加但没有进位,而与运算后再左移一位就是进位了 :zhenbang:
是在是妙啊

考虑 a = 5, b = 6的情况

a: 101
b: 110

异或:0011
与: 0100
进位:1000

重复直到进位结果为0即可

代码

func aplusb(a, b int) int {
	var sum int
	var carry int

	for b != 0 {
		sum = a ^ b
		carry = a & b << 1
		a = sum
		b = carry
	}

	return a
}

心得

还是要好好修炼基本功呀,路漫漫其修远兮,吾将上下求go

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注