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
- 9.迴文數
- leetcode第九題Palindrome Number 驗證迴文數字LeetCode
- Leetcode每日打卡20201001-----迴文數LeetCode
- 迴文數問題
- 20241106,LeetCode 每日一題,用 Go 實現整數迴文數判斷LeetCode每日一題Go
- 每日一道 LeetCode (3):迴文數LeetCode
- 小白刷題——迴文數
- 力扣題之迴文數力扣
- LeetCode題集-5 - 最長迴文子串(一)LeetCode
- LeetCode19題 刪除連結串列的倒數第N個節點 (c++ 遞迴)LeetCodeC++遞迴
- 迴文數
- LeetCode - 409 - 最長迴文串LeetCode
- 題解1161:【迴文數(二)】 (Java描述)Java
- LeetCode題解第122題LeetCode
- 遞迴-第X大的數遞迴
- Leetcode第1~10題LeetCode
- LeetCode125. 驗證迴文串LeetCode
- LeetCode 234. 迴文連結串列LeetCode
- LeetCode刷題之第701題LeetCode
- LeetCode題集-5 - 最長迴文子串之馬拉車(二)LeetCode
- LeetCode 5.最長迴文子串LeetCode
- leetcode 234.迴文連結串列 JavaLeetCodeJava
- LeetCode516. 最長迴文子序列LeetCode
- LeetCode第4題:尋找兩個有序陣列的中位數LeetCode陣列
- LeetCode 連結串列專題 19 刪除倒數第n個數 java 遞迴解法 幾乎雙百 思路簡單LeetCodeJava遞迴
- LeetCode 之 JavaScript 解答第169題 —— 求眾數 I(Majority Element)LeetCodeJavaScript
- leetcode演算法題解(Java版)-14-第k小數問題LeetCode演算法Java
- [原創][luogu]P1217 迴文質數 真·生成迴文的方法
- LeetCode-5. 最長迴文子串(Manacher)LeetCode
- Leetcode[字串] 5. 最長迴文子串LeetCode字串
- 演算法題:迴文演算法
- leetcode題解(遞迴和回溯法)LeetCode遞迴
- 藍橋杯試題 基礎練習 特殊迴文數
- [leetcode 第 400 場周賽]題解LeetCode