20200119:(leetcode)回文数(3种解法)

题目

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

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

基本思路

  1. 方法一:转化为字符串,然后直接反转对比原始字符串和反转后的字符串
  2. 方法二:长度为n的字符串,取出索引为0和n-1,1和n-2 …的索引对应的数字对比,不同则返回false。
  3. 方法三:题解提供的最简单方法,直接取后半段的数字反转后与前半段对比,关键部分在于判断截取下来的部分是否已经截取过半,因此需要判断截取后的数字与前半段数字的大小关系。

代码实现

方法一二

package com.immunize.leetcode.isPalindrome1;

/**
 * 方法二
 * 
 * @author Mr IMMUNIZE
 *
 */
public class Solution {
	public boolean isPalindrome(int x) {
		/*
		 * 方法一:
		 * 
		 * return (x + "").equals((new StringBuilder(x + "")).reverse().toString());
		 */
		if (x < 0)
			return false;
		// 获取当前x的位数
		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 = (x % div) / 10;
			// 因为去掉了2位数,所以被除数div也要少2位
			div /= 100;
		}
		return true;
	}
}



方法三

package com.immunize.leetcode.isPalindrome1;

/**
 * 方法三:
 * 
 * @author Mr IMMUNIZE
 *
 */
public class Solution {
	public boolean isPalindrome(int x) {
		if (x < 0 || (x % 10 == 0 && x != 0))
			return false;
		int Rx = 0;
		// x每次去除最低位
		while (x > Rx) {
			Rx = Rx * 10 + x % 10;
			x /= 10;
		}
		// 偶数则相等,奇数x则等于截取数字去掉最后一位。
		return x == Rx || x == Rx / 10;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IMMUNIZE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值