LeetCode Javascript实现 344. Reverse String 292. Nim Game 371. Sum of Two Integers
344. Reverse String
/** * @param {string} s * @return {string} */ var reverseString = function(s) { return s.split("").reverse().join(""); };
292. Nim Game
尼姆游戏还是很有意思的,这题有很多地方可以深入理解
/** * @param {number} n * @return {boolean} */ var canWinNim = function(n) { if(0 === n%4){ return false; } return true; }; //这题解题的过程中,LeetCode提示说和0进行比较的时候使用===而不是==
371. Sum of Two Integers
这题主要考验的是位运算
①异或xor的逆运算是它本身,两次异或同一个数时结果不变。在学习位运算的时候,我们知道XOR的一个重要特性是不进位加法,那么只要再找到进位,将其和XOR的结果加起来,就是最后的答案。/**
* @param {number} a * @param {number} b * @return {number} */ var getSum = function(a, b) { var c1 = a^b; var d = a&b; while(d!==0){ d = d<<1; c2 = c1^d; d = c1&d; c1 = c2; } return c1; }; //总之就是 0 1 1 — a ==3 1 0 1 — b ==5 —————————— 1 1 0 — c1 0 0 1 — d 0 1 0 — d=d<<1 1 0 0 — c2=c1^d 0 1 0 — d=c1&d 1 0 0 — c1=c2 —————————— 1 0 0 — d=d<<1 0 0 0 — c2=c1^d 1 0 0 — d=c1&d 0 0 0 — c1=c2 —————————— 1 0 0 0 — d=d<<1 1 0 0 0 — c2=c1^d 0 0 0 0— d=c1&d 1 0 0 0 — c1=c2
//关键就是异或—不进位加法,与运算—进位处为1,与运算再<<1则相当于进位数, a,b两个数字将axorb后再加上a&b的值,一直重复到没有进位(a&b==0)就计算完毕。
cncncn