回文数-java

题目描述(力扣题库9) : 

  •  给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数
    是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
  • 例如,121 是回文,而 123 不是。

  •  解题思路 :
    • 这个题目和我之前发过的博客" 整数反转 -- 整数反转-java-CSDN博客" 十分类似 , 有兴趣的话,可以去看看,该题有两种解题方向,一种是利用字符串, 使用双指针法, 快速判断该数是否为回文数( 但这种方法会占用一些额外的空间 ), 二是整数的后半部分进行反转,然后与整数的前半部分进行比较。( 注意要分奇偶 )
  • 法一:  双指针法
    • 双指针法是一种常用的技巧,通常用于解决数组或字符串相关的问题。在这里,使用两个指针分别从字符串的开头和末尾向中间移动,逐个比较字符,以判断是否满足某种条件在回文数判断中,左右指针分别指向字符串的开头和末尾,向中间移动并比较对应字符,以判断是否是回文数。
    • 解题步骤:
      • 1.如果输入的整数小于0,直接返回false,因为负数不可能是回文数。
      • 2.将整数转换为字符串,方便进行逐个字符比较。
      • 3.使用两个指针,一个指向字符串的开头,另一个指向字符串的末尾。
      • 4.在每一步中,比较两个指针指向的字符,如果不相等,则返回false。
      • 5.如果所有字符都比较完毕,没有发现不相等的情况,则返回true,表示是回文数。
    • 以下是该方法的完整代码 ( 已在力扣通过 ) ( 用时 : 5 ms, 消耗内存分布: 42.84MB)
    • class Solution {
          public boolean isPalindrome(int x){
              if (x < 0 || (x % 10 == 0 && x != 0))
                  return false;
      
              String str = String.valueOf(x);
      
              int left = 0;
              int right = str.length() - 1;
      
              while(left < right){
                  if(str.charAt(left) != str.charAt(right))
                      return false;
      
                  left++;
                  right--;
              }
      
              return true;
          }
      }

    • 法二: 
      • 当判断一个整数是否为回文数时,我们可以不必将整数转换为字符串来进行比较。将整数的后半部分进行反转,然后与整数的前半部分进行比较。如果整数长度为偶数,当反转的数字大于等于原始数字时,就说明已经处理了一半的数字。如果整数长度为奇数,当反转的数字等于原始数字除以10时,就说明已经处理了一半的数字。
    • 解题步骤: 
      • 1.初始化一个变量 reversed 为 0,用于存储反转后的数字。
      • 2.在循环中,每次取原始数字 x 的个位数(通过 x % 10),将其加到 reversed 的末尾。
      • 3.每次处理完一个个位数后,将原始数字 x 除以10(通过 x /= 10)以去除已经处理过的个位数。
      • 4.循环直到原始数字 x 小于 reversed这时表示已经处理了一半的数字(对于奇数位数的数字,reversed会多一位)。
    • 以下是法二的完整代码 ( 用时 : 4ms, 消耗内存分布 : 42.86 MB)​​​         
      •        
        class Solution {
            public boolean isPalindrome(int x) {
            // 负数和以0结尾的非零数不可能是回文数
            if (x < 0 || (x % 10 == 0 && x != 0))
                return false;
        
            int reversed = 0;
            while (x > reversed) {
                reversed = reversed * 10 + x % 10;
                x /= 10;
            }
        
            // 当数字长度为奇数时,reversed 会多一位,需要除以10去掉中间位
            return x == reversed || x == reversed / 10;
            }
        }
                   

  •            以上就是本篇文章的全部内容,感谢观看
  • 76
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值