/** * @param {string} s * @return {string} */ var reverseString = function(s) { return s.split("").reverse().join(""); };
尼姆遊戲仍是頗有意思的,這題有不少地方能夠深刻理解學習
/** * @param {number} n * @return {boolean} */ var canWinNim = function(n) { if(0 === n%4){ return false; } return true; }; //這題解題的過程當中,LeetCode提示說和0進行比較的時候使用===而不是==
這題主要考驗的是位運算spa
①異或xor的逆運算是它自己,兩次異或同一個數時結果不變。在學習位運算的時候,咱們知道XOR的一個重要特性是不進位加法,那麼只要再找到進位,將其和XOR的結果加起來,就是最後的答案。/**code
* @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)就計算完畢。