leetcode的第9題:迴文數
題目描述
判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個迴文數。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個迴文數。
解題思路
先排除幾種特殊的情況,負數不可能是迴文數,個位數為0的非零數字不是迴文數,0為迴文數
思路一
將傳入的數字轉換成字串,再轉換成陣列,接著利用陣列方法reverse()進行翻轉,再轉換為字串,需去除逗號,再轉換成整數,然後與原數進行比較從而判斷是否為迴文數。程式碼如下:
/**
* @param {number} x
* @return {boolean}
*/
//藉助字串的實現
var isPalindrome = function(x) {
if(x < 0) return false;
return x === x.toString().split('').reverse().toString().replace(/,/g,'') * 1
};
思路二
利用第七題的翻轉整數,然後將結果與原數比較得出是否為迴文數,程式碼如下:
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if(x < 0 | x % 10 === 0) return false;
let num = x;
let result = 0;
while(Math.floor(num) !== 0) {
result = result * 10 + num % 10;
num = Math.floor(num/10)
}
console.log(result);
return x === result
};
思路三
基於思路二的解題思路,只需翻轉一半的整數n,再與那剩下的一半x進行比較,重而判斷是否為迴文數,通過翻轉的一半n大於或等於剩下的一半x,來確定是否翻轉了一半,此時有兩種情況:n == x 或 n > x,前者直接返回true,後者這要考慮n比x多出一位,並且這一位是原數的中間位置,現在則在n的個位數上,通過除10取餘數後再進行比較,程式碼如下:
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome3 = function(x) {
if(x < 0 | (x % 10 === 0 && x !== 0)) return false;
let n = 0;
while(x > n) {
n = n * 10 + x % 10;
x = Math.floor(x/10)
}
return x === n || x === Math.floor(n / 10)
}
思路四:
將原數轉換成字串後,利用字串的charAt()方法,不斷比較從頭出發和從尾出發的數字是否相等,若不等著返回false,走完字串則返回true,程式碼如下:
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if(x < 0 | (x % 10 === 0 && x !== 0)) return false;
let xStr = x.toString();
let leftIndex = 0;
let rightIndex = xStr.length - 1;
while(leftIndex < rightIndex) {
let leftNum = xStr.charAt(leftIndex++);
let rightNum = xStr.charAt(rightIndex--);
if(leftNum !== rightNum) return false
}
return true
}
相關文章
- LeetCode每日一題:迴文數(No.9)LeetCode每日一題
- LeetCode9[迴文數]LeetCode
- LeetCode-N9-迴文數LeetCode
- LeetCode迴文數(Python)LeetCodePython
- (迴文串)leetcode各種迴文串問題LeetCode
- LeetCode 第 9 題(Palindrome Number)LeetCode
- leetcode第九題Palindrome Number 驗證迴文數字LeetCode
- 每日一道 LeetCode (3):迴文數LeetCode
- [LeetCode] Palindrome Number 驗證迴文數字LeetCode
- LeetCode19題 刪除連結串列的倒數第N個節點 (c++ 遞迴)LeetCodeC++遞迴
- 題解1161:【迴文數(二)】 (Java描述)Java
- 迴文數系列題目(經典演算法)演算法
- 特殊迴文數(很坑
- java判斷迴文數Java
- 素數迴文——輸出兩整數之間所有既是迴文數又是素數的數 C++實現C++
- 演算法趣題:迴文十進位制數演算法
- LeetCode - 409 - 最長迴文串LeetCode
- 演算法題:迴文演算法
- 藍橋杯試題 基礎練習 特殊迴文數
- Leetcode第1~10題LeetCode
- ACM之判斷迴文數ACM
- LeetCode 5.最長迴文子串LeetCode
- LeetCode 234. 迴文連結串列LeetCode
- LeetCode125. 驗證迴文串LeetCode
- LeetCode 連結串列專題 19 刪除倒數第n個數 java 遞迴解法 幾乎雙百 思路簡單LeetCodeJava遞迴
- Leetcode每日打卡20201001-----迴文數LeetCode
- 今日面試題:最長迴文子串;及迴文分割分析面試題
- LeetCode第4題:尋找兩個有序陣列的中位數LeetCode陣列
- LeetCode題解第122題LeetCode
- LeetCode刷題之第701題LeetCode
- LeetCode 第 69 題 (Sqrt(x))LeetCode
- LeetCode 第 7 題(Reverse Integer)LeetCode
- LeetCode 第 342 題(Power of Four)LeetCode
- LeetCode 第 343 題 (Integer Break)LeetCode
- LeetCode 第 66 題 (Plus One)LeetCode
- C語言:迴文數計算C語言
- LeetCode516. 最長迴文子序列LeetCode
- Leetcode[字串] 5. 最長迴文子串LeetCode字串