LeetCode(java)9. Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.

题目描述:判断一个数字是否为回文数组,不允许使用辅存。

解法一:将数字x翻转后存于一个long中(防止溢出)

leetcode通过时间为:9ms(不推荐,比较用long来解决溢出并不是题目希望的,目前未想到其他解决溢出的方法)

public boolean isPalindrome(int x)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">	</span>    if(x<0)
<span style="white-space:pre">	</span>        return false;
<span style="white-space:pre">		</span>int temp = x;
<span style="white-space:pre">		</span>long rs = 0;
<span style="white-space:pre">		</span>while(temp != 0)
<span style="white-space:pre">		</span>{
<span style="white-space:pre">			</span>rs = rs*10+temp%10;
<span style="white-space:pre">			</span>temp/=10;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>if(rs == x)
<span style="white-space:pre">			</span>return true;
<span style="white-space:pre">		</span>else
<span style="white-space:pre">			</span>return false;
<span style="white-space:pre">	</span>}


解法二:模拟从两边向中间靠拢

例如输入1234321

首先细算最左边的位数left = 1000000;

然后数字 x 除 left 得到最左边的数字 a

 x 对10取余得到最右边的数字 b

判断a b两个数字是否相等,不等则返回false,相等则继续。

然后对数字 x 进行处理,目标是:从1234321 变成 23432 

① 将x对left取余的结果赋予x
② 即x从1234321变为234321
③ 再将x除10 得到目标23432
最后对left进行处理

x以及减少2位了,故left = left/100;

循环以上步骤直至left == 0

代码如下:

leetcode通过时间为10ms

public boolean isPalindrome(int x) {
		if(x<0)
			return false;
		else if(x<10)
			return true;
		int left = 1;
		int right = 10;
		int temp = x;
		while((temp/=10)!=0)
		{
 			left*=10;
		}
		while(left>0)
		{
			if(x/left != x%right)
				return false;
			x=(x%left)/10;
			left/=100;
		}
		return true;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值