提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
题目出自力扣
算法练习题:回文数 Palindrome Number
一、题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-231 <= x <= 231 - 1
进阶:你能不将整数转为字符串来解决这个问题吗?
二、解答
1.代码
代码如下(示例):
import java.util.LinkedHashMap;
import java.util.Map;
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isPalindrome(int x) {
// 判断是否小于0 如果小于0 直接返回false
if (x < 0) {
return false;
}
// 判断是否为单数 如果是单数 直接返回true
if (x < 10) {
return true;
}
// 有序map 其实有序map没啥意义,普通的hashmap也可以
int i = 0;
Map<Integer, Integer> map = new LinkedHashMap<>();
while (x>0) {
map.put(i, x % 10);
// 强转为多此一举了
x = (int) x / 10;
i++;
}
int j = 0;
// 把map理解为一个可变数组,下标从0开始,那么最后一位数的下标就是size-1
int k = map.size() - 1;
// 当j<k的时候跳出循环,当数字为四位数那么比到第二位和第三位就好了,如果是五位数第三位其实不用比
while (j<k) {
// 只要出现不一样的就直接返回false
if (map.get(j) != map.get(k)) {
return false;
}
j++;
k--;
}
return true;
}
}
//leetcode submit region end(Prohibit modification and deletion)
2.复盘
方法二:用string做然后比较字符。
方法三:一直取余数然后将余数将余数 (res*10+nextRes)*10····这样将整个数倒置,然后比较数字大小。
还有优化空间,以后有空继续更新
总结
这是一道简单的算法题,但是还是花费了我很久的时间,希望继续努力。