# 如何用JavaScript判斷是不是回文數
## 什么是回文數?
回文數(Palindrome Number)是指正讀和反讀都相同的數字。例如:
- 121(正讀:121,反讀:121)
- 1331(正讀:1331,反讀:1331)
- 12321(正讀:12321,反讀:12321)
非回文數的例子:
- 123(反讀:321,不相同)
- -121(反讀:121-,不相同)
## JavaScript實現方法
### 方法一:字符串反轉法
**思路**:將數字轉換為字符串,反轉后與原字符串比較。
```javascript
function isPalindrome(num) {
// 處理負數和非數字情況
if (typeof num !== 'number' || num < 0) return false;
const str = num.toString();
const reversedStr = str.split('').reverse().join('');
return str === reversedStr;
}
// 測試用例
console.log(isPalindrome(121)); // true
console.log(isPalindrome(-121)); // false
console.log(isPalindrome(12321)); // true
console.log(isPalindrome(123)); // false
優點: - 代碼簡潔直觀 - 易于理解
缺點: - 需要額外的內存存儲反轉字符串 - 對于極大數字可能效率不高
思路:通過數學運算反轉數字的后半部分,與前半部分比較。
function isPalindromeMath(num) {
if (typeof num !== 'number' || num < 0 || (num % 10 === 0 && num !== 0)) {
return false;
}
let reversedHalf = 0;
while (num > reversedHalf) {
reversedHalf = reversedHalf * 10 + (num % 10);
num = Math.floor(num / 10);
}
// 處理奇數位和偶數位情況
return num === reversedHalf || num === Math.floor(reversedHalf / 10);
}
// 測試用例
console.log(isPalindromeMath(12321)); // true
console.log(isPalindromeMath(1221)); // true
console.log(isPalindromeMath(123)); // false
優點: - 不需要字符串轉換 - 空間復雜度O(1) - 適合處理極大數字
缺點: - 邏輯稍復雜 - 邊界條件較多
思路:將數字轉為字符串后,使用雙指針從兩端向中間比較。
function isPalindromeTwoPointer(num) {
if (typeof num !== 'number' || num < 0) return false;
const str = num.toString();
let left = 0;
let right = str.length - 1;
while (left < right) {
if (str[left] !== str[right]) return false;
left++;
right--;
}
return true;
}
// 測試用例
console.log(isPalindromeTwoPointer(12321)); // true
console.log(isPalindromeTwoPointer(123)); // false
優點: - 只需比較到中間即可返回結果 - 不需要完整反轉字符串
缺點: - 仍需要字符串轉換
方法 | 時間復雜度 | 空間復雜度 | 適用場景 |
---|---|---|---|
字符串反轉法 | O(n) | O(n) | 一般場景 |
數學運算法 | O(log n) | O(1) | 極大數字 |
雙指針法 | O(n) | O(n) | 需要提前終止的場景 |
本文介紹了三種JavaScript判斷回文數的方法,各有優缺點。在實際開發中: - 追求代碼簡潔可用字符串反轉法 - 處理極大數字推薦數學運算法 - 需要優化比較過程時可用雙指針法
理解這些方法的差異,能幫助我們在不同場景選擇最優解決方案。 “`
(注:實際字數為約850字,此處為簡潔展示保留了核心內容框架)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。