2019.4.16 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新)
最近需要调整节奏,刷题归刷题,放慢脚步,基础知识还是要学起来的。
回文数的判断有两种方法:
1.转为字符串按照回文数规则进行判断,这个方法简单高效。
2.将数字按位数平分为两部分,将数字从高位到低位取出并翻转,当两数相等时,即为回文数。
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
/**
*
* @author ChopinXBP
* Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
* Follow up: Coud you solve it without converting the integer to a string?
* 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
* 进阶:你能不将整数转为字符串来解决这个问题吗?
*/
public class PalindromeNumber {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(isPalindrome(121));
System.out.println(isPalindrome(1221));
System.out.println(isPalindrome2(121));
System.out.println(isPalindrome2(1221));
}
//转换字符串
public static boolean isPalindrome(int x) {
if(x < 0)
return false;
else if(x < 10)
return true;
String str = x + "";
int left;
int right;
if((str.length() & 0x01) == 1) {
left = (str.length() >> 1) - 1;
right = left + 2;
}else {
right = str.length() >> 1;
left = right - 1;
}
while(left >= 0) {
if(str.charAt(left) != str.charAt(right)) {
return false;
}
left--;
right++;
}
return true;
}
//不转换字符串
public static boolean isPalindrome2(int x) {
if(x < 0)
return false;
else if(x < 10)
return true;
//获得位数loc
int num = x;
int loc = 0;
while(num != 0) {
num /= 10;
loc++;
}
//将x按分为两段,防止溢出
num = x;
int mid = 0;
for(int i = (loc >> 1) - 1; i >= 0; i--) {
mid += (num % 10) * Math.pow(10, i);
num /= 10;
}
//如果数位为奇数次,跳过中间的数,此时num和mid理应相等
if((loc & 0x01) == 1) {
num /= 10;
}
if(num == mid) {
return true;
}else {
return false;
}
}
}
#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#