嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解和Python, JS, JQ, CSS, PHP, JAVA的一些小Demo。请大家关注我,一起交流学习吧。
题目描述
数组法
做题思路
一个通俗易懂的做题方法就是,将数字的每一位存到数组里,然后利用双指针对数组进行遍历,进而判断是否为回文数。
题目代码
class Solution {
public boolean isPalindrome(int x) {
//如果为负数,则不是回文数,这里还可以添加一个就是尾数为0的情况.
if(x < 0){
return false;
}
//构建一个动态数组
List<Integer> array = new ArrayList<>();
//将某一位添加到动态数组
while(x > 0){
array.add(x%10);
x/=10;
}
int i = 0;
int j = array.size()-1;
//双指针遍历
while(i<j){
if(array.get(i) != array.get(j)){
return false;
}else{
i++;
j--;
}
}
return true;
}
}
字符串法
做题思路
我们可以先将该数字转为字符串,然后再进行遍历字符串,因为java里面有很多函数可以达到这个目标,所以我们也可以这样完成。题目代码
class Solution {
public boolean isPalindrome(int x) {
//如果为负数,则不是回文数,这里还可以添加一个就是尾数为0的情况.
if(x<0){
return false;
}
//将其转化为字符串,注意这个函数的用法
String t = Integer.toString(x);
int i = 0;
int j = t.length()-1;
//双指针遍历
while(i<j){
if(t.charAt(i)!=t.charAt(j)){
return false;
}
else{
i++;
j--;
}
}
return true;
}
}
数学法
做题思路
这个方法也比较同意想到和容易理解,但是代码实现有一些难度,主要思路是给出一个数,然后我们得出数的第一位和最后一位。最后一位比较容易想到对10取余即可,那第一位应该怎么得到呢?比如1001,我们得到1可以通过1001%10==1;第一位的话可以通过1001/1000得到。即为1,然后每次缩小所除的数,一次缩小两位,则除100。但是这个方法效率不是特别高。题目代码
class Solution {
public boolean isPalindrome(int x) {
if(x<0){
return false;
}
int pro =1;
//这一步用来求第一位的值的除数。比如1001/1000==1,
//我们可以通过这个循环得到1000;
while(x/pro>=10){
pro*=10;
}
System.out.println(pro);
while(x>0){
int first = x / pro;
int last = x % 10;
if(first!=last){
return false;
}
//这里是用来去掉首尾两位的情况
x=(x%pro)/10;
//缩小最大除数,因为是减少两位,所以是除100;
pro/=100;
}
return true;
}
}
巧解法
做题思路
这个方法比较巧妙,也是运用到了数学知识,主要思路就是将一个数的后半部分取出来,将尾部变为头部,然后和第一个数进行比较。但是我们会遇到两种情况一种是,数字为为奇数,一种是数字位数为偶数,所以我们需要返回两种情况 下图则为解题思路题目代码
class Solution {
public boolean isPalindrome(int x) {
// 这里就需要完全加入尾数为0的情况了,因为靠下面的while不能去除尾数为0的情况
if(x < 0 || (x%10 == 0 && x!=0)){
return false;
}
int renum = 0;
while(x > renum){
//流程图内容
renum = renum * 10 + x % 10;
x/= 10;
}
//位数为奇偶的两种情况
return renum == x || renum/10 == x;
}
}
总结
同学们我最近有了一个长久的计划,就是把leetcode题目整理出来,由浅入深,由简到繁都整理出来是一个宏大的工程,所以我打算每天整理一到两个经典题目,完成这一个流程我相信肯定会收获巨大的。如果想一起刷题的哥们,我们可以一起在群里打卡,共同进步。
作者:LeetCode
链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。