回文数 | LeetCode刷题笔记

1,141 阅读2分钟

这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战


相关文章

LeetCode刷题汇总:LeetCode刷题

一、题目描述


快乐数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

从简单题目开始刷,锻炼自己的思维能力,为面试准备~

二、思路分析


  • 看看题目的示例,我们来理一理这个思路~

  • 示例 1:

    输入:x = 121
    输出:true
    
  • 示例2:

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

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

  • 输入:x = -101
    输出:false
    
  • 提示:-231 <= x <= 231 - 1

  • 第一眼看过去,这玩意不就是字符串反转嘛!
  • 直接反转过来,判断是否一致即可。
  • 前提条件是小于0或者大于2147483647都返回false即可。
  • 简单粗暴!

三、AC 代码


  • 字符串反转解法:

    class Solution {
        public boolean isPalindrome(int x) {
            //首先判断是否在范围之内
            if(x<0 || x>2147483647){
                return false;
            }
           String str = String.valueOf(x);
           //直接将字符串反转
           String flip = new StringBuffer(String.valueOf(x)).reverse().toString();
            //如果相等,证明是符合条件即为回文数,反之不是
            if (str.equals(flip)){
                return true;
            }
            return false;
        }
    }
    
    • image-20210816184037406.png
    • 看到这个效率真的不忍直视呀!
    • 莫得事!下面我们来个高级的解法!
  • 双指针破解法:

    class Solution {
        public boolean isPalindrome(int x) {
        String s = String.valueOf(x);
            //i是头,j是尾
            int i=0,j=s.length()-1;
            //能整个循环结束的说明是回文数
            while(i<j){
                if (s.charAt(i)!=s.charAt(j)){
                    return false;
                }
                i++;
                j--;
            }
            return true;
        }
    }
    
    • image-20210816183654813.png
    • 从结果可以看出,明显比原先的效率高了很多!
    • 这种思路就是循环,开头跟结尾的比较即可。

四、总结

  • 解题思路千千万,不管是本办法还好,还是奇思妙想的解法,能解决就是好办法!白猫黑猫能抓老鼠的猫就是好猫!
  • 这里列几个LeetCode的其他大神的解法作为参考!
  • 点击跳转:官方解法
  • 点击跳转:画解算法

**路漫漫其修远兮,吾必将上下求索~ **如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah