LeetCode 第九题 回文数

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

示例1:
输入:123
输出:true

示例2:
输入 -121
输出:false

解法一:整数转换成字符串
思路:先将整数转化为字符串,然后利用 reverse()方法,将字符反转,最后利用 equals()方法,来判断字符串是否相等
代码

public boolean isPalindrome(int x)
   {
       String reversedStr = (new StringBuilder(x+"").reverse().toString());
       return (x+"").equals(reversedStr);


   }

解法二:数学解法
思路:通过取整和取余获取整数中对应的数字进行比较
例如:1221 这个数字

  • 通过计算 1221/1000,得首位1
  • 通过计算 1221%10
  • 进行比较
  • 再将 22 取出来继续比较

代码

 public boolean isPalindrome(int x)
   {
       //边界判断
       if(x<0) return false;
       int div = 1;
       while(x/div >= 10) div *= 10;//为获取左边第一位数字做准备
       while(x>0)
       {
           int left = x/div;
           int right = x%10;
           if(left != right) return false;
           x = (x%div)/10;//去除左右两端的数字,完成更新
           div /=100;//更新
       }
       return true;
   }

解法三:巧妙解法–对半折
思路:直观上来看待回文数的话,就感觉像是将数字进行对折后看能否一一对应:取出后半段数字进行翻转
这里需要注意的一个点就是由于回文数的位数可奇可偶,使用当它长度为偶数是,它对折过来应该是相等的;当它长度是奇数时,那么它对折过来后,有一个的长度需要去掉一位数(除以10并取整)
具体做法如下:

  • 每次进行取余操作(%10),取出最低位的数字:y=x%10
  • 将最低的数字加到取出数的末尾:revertNum = revertNum*10+y
  • 每取一个最低位数字,x都要自除以10
  • 判断x是不是小于revertNum,当它小于的时候,说明数字已经对半或者过半了
  • 最后,判断奇偶数情况:如果是偶数的话,revetNum 和 x 相等;如果是奇数的话,最中间的数字就在 revertNum 的最低位上,将它除以10以后应该和x相等

代码

 public boolean isPalindrome(int x)
   {
       if(x<0||(x%10 == 0&& x!=0)) return false;
       int revertNum = 0;
       while(x>revertNum)
       {
           revertNum = revertNum*10 + x%10;
           x/=10;
           
       }
       return x == revertNum || x==revertNum/10;
   }

**ps:以上来着于 LeetCode用户 程序员吴师兄 回文数 **

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值