[leetcode]9.回文数

向右看齐 2022-03-17 08:42 323阅读 0赞

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

我最开始的解法,把数字转换成字符串,然后比较头尾,时间空间复杂度还过得去。当然反转方法也可以用gBuilder的reverse()方法来进行。

  1. class Solution {
  2. public boolean isPalindrome(int x) {
  3. if(x<0){
  4. return false;
  5. }else{
  6. char[] charStr = Integer.valueOf(x).toString().toCharArray();
  7. for(int i=0; i<charStr.length/2; i++){
  8. if(charStr[i] != charStr[charStr.length-1-i]){
  9. return false;
  10. }
  11. }
  12. }
  13. return true;
  14. }
  15. }

进阶要求是不把数字转换为字符串,这个可以通过数值反转来实现,但是会有一个问题,就是反转后的数值可能会超出int的范围,讨论区有人提出一个思路就是将数字都变成long类型,这样就不会超出了。

  1. class Solution {
  2. public boolean isPalindrome(int x) {
  3. long revx = 0;
  4. long orx = x;
  5. if(x<0){
  6. return false;
  7. }
  8. while(orx > 0){
  9. revx = revx * 10 + orx%10;
  10. orx = orx/10;
  11. }
  12. if(revx != x){
  13. return false;
  14. }
  15. return true;
  16. }
  17. }

写完之后在想,如果数字本身是long那怎么办,由此忽然想到,虽然这个情况是存在的,但是如果是回文数的话那么反转后肯定不会超出int,如果不是回文数,超出后会被截取,也肯定不等于原数,所以这个问题可以忽略,代码如下。

  1. class Solution {
  2. public boolean isPalindrome(int x) {
  3. int revx = 0;
  4. int orx = x;
  5. if(x<0){
  6. return false;
  7. }
  8. while(orx > 0){
  9. revx = revx * 10 + orx%10;
  10. orx = orx/10;
  11. }
  12. if(revx != x){
  13. return false;
  14. }
  15. return true;
  16. }
  17. }

发表评论

表情:
评论列表 (有 0 条评论,323人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode 9

    判断一个整数是否是回文数,不能使用辅助空间。 说明:回文数是正着读反着读都一样的数字。 思路1:分离出原数的每一位数字,保存在新的数组中,判断数组是否对称。But,不

    相关 [leetcode]9.

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 我最开始的解法,把数字转换成字符串,然后比较头尾,时间空间复杂度还过得去。当然反转方

    相关 LeetCode 9

    题目描述: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例

    相关 LeetCode9 :

    回文数 题目描述 判断一个整数是否是回文数。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例子 <table> <thead>