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 0c1
 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)就计算完毕。

 

你可能感兴趣的:(LeetCode Javascript实现 344. Reverse String 292. Nim Game 371. Sum of Two Integers)