leecode/daily/2019-07-25.md
2020-05-22 18:17:19 +08:00

93 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 毎日一题 - 9. Palindrome number
## 信息卡片
- 时间2019-07-25
- 题目链接https://leetcode.com/problems/palindrome-number/submissions/
- tag`Math`
## 题目描述
```
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Input: 121
Output: true
Example 2:
Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:
Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Follow up:
Coud you solve it without converting the integer to a string?
```
## 参考答案
转成字符串方式
1. 负数都是非回文数10的整数倍不是回文。
2. 将数字转为字符串,再逆序排列字符串。两者比较,相等就是回文数。
直接操作整数方式
1. 复制x到temp;
2. 取temp末尾数字方式为temp与10的求余组成新数reverse;
3. 每取完一位,temp缩小10倍并且去掉小数。
4. reverse要`先扩大十倍`再加上取下来的数
5. 当temp === 0时表示已经取完reverse与x比较
参考JavaScript代码
```js
/**
* @param {number} x
* @return {boolean}
* 转成字符串
*/
var isPalindrome = function(x) {
if(x < 0 ) return false;
if(x === 0) return true;
if(x % 10 === 0) return false;
let reverse = '';
let str = String(x);
for(let i = str.length - 1; i >= 0; i--) {
reverse += str[i]
}
return str === reverse
};
/**
* @param {number} x
* @return {boolean}
* 不转成字符串
*/
var isPalindrome = function(x) {
if(x < 0 ) return false;
if(x === 0) return true;
if(x % 10 === 0) return false;
let temp = x;
let reverse = 0;
while(temp > 0) {
let num = temp % 10;
temp = (temp - num)/10; // 或 temp = (temp / 10) >> 0,去除小数位
reverse = reverse * 10 + num
}
return x === reverse
};
```
## 优秀解答
> 暂缺