LeetCode简单题6(判断回文数)

回文数(java)

题目描述:
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
进阶:能不用转换成字符串的方式解决吗?
样例:
输入:12321
输出:true

输入:-1221
输出:false

输入:10
输出:false

题解:
解一:
使用了转换成字符串的方法,首先负数和尾数带零的整数都不是回文数,先判断排除。再处理其他的情况,转换为字符串循环前半部分每一个字符与后半部分的对应字符比较,只要存在一个不相等的就不是回文数

public static boolean isPalindrome(int x) {
  //判断回文数
  //(1)转换成String解决的方法
  if(x<0 | (x%10 == 0&&x!=0)) {
   return false;
  }else {
   String y = Integer.toString(x);
   for(int i=0 ; i<=y.length()/2 ; i++) {
    if(y.charAt(i) != y.charAt(y.length()-i-1)) {
     return false;
    }
   }
   return true;
  }

解二:
进阶的不使用字符串方法我实在是没想出来,就学习了官方解法
我理解的题解思路都写在注释里了。(不禁想感慨一句,算法文化博大精深!)

public static boolean isPalindrome(int x) {
  //判断回文数
  //直接在整数类型情况下判断
  if(x<0 || (x%10==0&&x!=0)) {
   return false;
  }
  //将整数后半部分反转,例如将123321转换成reverseHalf=123和x=123,
  //或者将12321转换成reverseHalf=123和x=12
  int reverseHalf = 0;
  while(x>reverseHalf) {
   reverseHalf = reverseHalf *10 + x%10;
   x /= 10;
  }
  //偶数位情况下返回判断reverseHalf==x的情况
  /*奇数位情况下由于中心位不影响判断(他自己永远等于他自己),于是将reverseHalf的最后一位(即中心位)去掉(操作reverseHalf/10),
  并返回判断与x是否相等的结果*/
  return x == reverseHalf || x == reverseHalf/10;
  
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值