leetcode - [9] 回文数|刷题打卡
我是通过idea的leetcode插件获取题目做题的,所以题目描述基本都会有注释符号哈
1. 题目描述
//给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
//
// 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
//
// 示例 1:
//
//输入:x = 121
//输出:true
//
// 示例 2:
//
//输入:x = -121
//输出:false
//解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
//
// 示例 3:
//
//输入:x = 10
//输出:false
//解释:从右向左读, 为 01 。因此它不是一个回文数。
//
// 示例 4:
//
//输入:x = -101
//输出:false
//
//
// 提示:
//
// -231 <= x <= 231 - 1
//
// 进阶:你能不将整数转为字符串来解决这个问题吗?
// Related Topics 数学
2. 思路分析
这道题目看到的时候会两个思路:
- 直接作为数字来处理
- 先判断是否>0,小于0都不用考虑了
- 大于0的话我们构造一个与原有数字相反的数字
- 比较两个数字是否一致
- 转成字符串比对
- 先判断是否>0,小于0都不用考虑了
- 获取到字符串的长度,我们需要取中间值作为判断值(注意长度奇数偶数是否会有影响)
- 用 String.chatAt() 方法判断头尾是否相同
3. AC代码
public class No9 {
public boolean isPalindrome(int x) {
// 粗暴方法
// return simple(x);
// 转字符串
return trans2Str(x);
// 网上答案
// return isPalindrome1(x);
}
/**
* 转字符串后处理
* 根据字符串长度,对半处理
*
* 执行耗时:10 ms,击败了76.11% 的Java用户
* 内存消耗:37.8 MB,击败了66.98% 的Java用户
*
* @param x
* @return
*/
private boolean trans2Str(int x) {
boolean re = false;
// 大于0不用考虑
if (x < 0) return re;
String str = String.valueOf(x);
int strLen = str.length();
int head = 0;
int tail = strLen - 1;
int flag = strLen/2;
// 感觉每次判断的 < <= > >= 都要好好思考一波
while (head < flag) {
if(str.charAt(head) != str.charAt(tail)) {
return re;
}
// 头尾都往中间靠拢
head++;
tail--;
}
re = true;
return re;
}
/**
* 直接取值,构造一个反转值,然后再比对
*
* 执行耗时:11 ms,击败了50.09% 的Java用户
* 内存消耗:37.9 MB,击败了45.56% 的Java用户
*
* @param x
* @return
*/
private boolean simple(int x) {
boolean re = false;
// 小于0,不用考虑
if (x >= 0) {
boolean flag = true;
int y = 0;
int tmp = Integer.valueOf(x);
// 构造一个反转过来的数
while (flag) {
y = y * 10 + tmp % 10;
tmp = tmp / 10;
// 判断结束条件
flag = tmp != 0 ? true : false;
}
re = y == x;
}
return re;
}
/**
* 网上大佬的做法,时间快了1ms
*
* 执行耗时:9 ms,击败了99.12% 的Java用户
* 内存消耗:38 MB,击败了28.05% 的Java用户
*
* @param x
* @return
*/
public boolean isPalindrome1(int x) {
if(x < 0)
return false;
int cur = 0;
int num = x;
while(num != 0) {
cur = cur * 10 + num % 10;
num /= 10;
}
return cur == x;
}
}
4. 总结
这道题给我的想法是对于一些临界值的判断条件,要特别注意给到精确的判断条件以及判断值。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情