這次的題目是剛開始學習程式語言的初學者都學過的邏輯: 回文
一樣先來看下題目
Given an integer x, return true if x is palindrome integer.
An integer is a palindrome when it reads the same backward as forward.
For example, 121 is a palindrome while 123 is not.
這裡就不翻譯了畢竟題目顯而易見
先來看一下我的代碼
var isPalindrome = function (x) {const num = x.toString()let resultlet length = num.length - 1for (let i = 0; i < num.length; i++) {if (num[i] === num[length - i]) {result = true} else {console.log(i)return false}}return result
}
雖然可行,不過效能方面似乎不太理想
Runtime: 348 ms, faster than 20.76% of JavaScript online submissions for Palindrome Number. Memory Usage: 50.7 MB, less than 7.18% of JavaScript online submissions for Palindrome Number
看到了一個會心一笑的答案
function isPalindrome(x) {if (x < 0) return false;if (x < 10) return true;if (x % 10 === 0) return falselet rev = 0;while (rev < x) {rev *= 10;rev += x%10;x = Math.trunc(x/10);}return rev === x || Math.trunc(rev/10) === x;
}
因為確實很簡單的是前面都把最基本的跟小於10或者10的倍數這些都給先過濾掉了,而當個位數時,自然是個回文
而繼續往下判斷使用了循環:
rev *= 10 : 表示增加位數,個位變十位,十位在變百位以此類推
rev += x%10 : 表示把x的各位數取出並加回rev變量
x = Math.trunc(x/10) : 縮減一位數,已供下次循環繼續使用
而最後的判斷可以發現
rev === x : 針對位數為雙數時
Math.trunc(rev/10) === x : 針對位數為單數時
第二個方法則是充分利用了js 內建的方法
var isPalindrome = function (x) {if (x === 0) return true;if (x < 0 || x % 10 === 0) return false;return `${x}` === `${x}`.split('').reverse().join('');
}
先把x轉為字符串,而後再將字符串轉為數組好調用reverse最後在將這些數組拼接回字符串,和原本的x做對比!