其他分享
首页 > 其他分享> > 【LeetCode】判斷是否為回文Palindrome

【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