Leetcode_9_Palindrome Number

时间:2021-11-29 08:35:13

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41598031

Palindrome Number

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

思路:

(1)题意中限制不可申请额外的空间,所以不能将整数转为字符串进行处理。如果没有限制,则可将其转为字符串,前后分别进

行遍历即可进行判断。

(2)需要注意的是,需要对负数进行判断,负数显然不是回文串。

(3)首先,需要设置标志位来记录该整数最高位所对最小整数,例如1221,包含所有位数最小整数位1000,则标志位为1000。

(4)其次,判断该整数"/1000"(即对标志位取整)的结果是否和其“%10”(取余数)得到的结果相同,即判断最高位和最低位所

对的数字是否相同,不相同则返回false;

(5)最后,如果相同,首先去除该整数位“最高位”,即该整数减去其 “最高位 * 标志位”(得到结果为221),然后去除其“最低位”,

将所得结果再“/10”(取整,得到结果为22),这样就去掉了最高位和最低位。由于去掉了“两位”,所以标志位对应也需要去

掉“两位”,即标志位需要再“/100”(10的2次方)。循环上述操作,直到该整数小于0,最后返回对应结果。

算法代码实现如下所示:(希望对你有所帮助,谢谢)

public static boolean isPalindrome(int x) {
	if (x < 0)
		return false;
	int flag = 1;
	//确定为10的多少幂次方
	while (x / flag > 9) {
		flag = flag * 10;
	}

	while (x > 0) {
		//判断最高位和最低位是否相同
		if (x/flag != x % 10) {
			return false;
		} else {
			//得到最高位
			int left = x / flag;
			//去掉最高位
			x = x - left * flag;
			//去掉最低位
			x = x / 10;
			//位数少了两位,标志位减少10的2次方100
			flag = flag / 100;
		}
	}
	return true;
}