【LeetCode】判斷是否為回文Palindrome
作者:互联网
這次的題目是剛開始學習程式語言的初學者都學過的邏輯: 回文
一樣先來看下題目
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 result
let length = num.length - 1
for (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 false
let 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做對比!
标签:10,Palindrome,return,rev,num,let,判斷,LeetCode,Math 来源: https://blog.csdn.net/tp27933/article/details/122715487