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)就計算完畢。