• 力扣-9-回文数


    回文数

    CategoryDifficultyLikesDislikes
    algorithmsEasy (56.52%)2330-

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

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

    • 例如,121 是回文,而 123 不是。

    示例 1:

    输入:x = 121
    输出:true
    
    • 1
    • 2

    示例 2:

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

    示例 3:

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

    提示:

    • -231 <= x <= 231 - 1
    思路:
    1. 转换为字符串,检查字符串是否为回文。(需要额外的空间进行转换)
    2. 将数字本身进行翻转,但是考虑到数字可能超过int.max的情况。
    3. 考虑只翻转数字的一半,比如x = 12345678987654321.只翻转前一部分12345678或者后一部分87654321就可以,然后通过判断翻转之后的数字和剩余的部分是否相等。就可以得知是否为回文。
    解决步骤
    1. 先处理临界条件:所有的负数肯定不可能是回文数,所有0结尾的数字(除0之外)不可能是回文数。

      if(x < 0 || (x % 10 == 0 && x != 0){
          return false;
      }
      
      • 1
      • 2
      • 3
    2. 对于数字12321,如果执行x % 10,可以得到最后一位数字1,要得到倒数第二位数字,可以先通过除以10移除最后一位,再求出上一步结果除以10的余数,就可以得到第二位数字。然后把所得到的数子加起来,得到的就是反转后的数字。

    3. 如何判断反转数字已经达到原始数字的位数的一半?

      1. 由于整个过程不断将原始数字除以10,然后给反转后的数字乘上10,所以,当原始数字小于或者等于反转后的数字时,就意味着我们已经处理了一半位数的数字了。

    答案

    class Solution{
    	public boolean isPalindrome(int x){
    		if(x < 0 || (x % 10 == 0 && x != 0)){
    			return false;
    		}
    		int revertedNumber = 0;
    		while(x > revertedNumber){
    			revertedNumber = revertedNumber * 10 + x % 10;
    			x /= 10;
    		}
    		return x == revertedNumber ||x == revertedNumber / 10;
    	}
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    十四、使用 Vue Router 开发单页应用(2)
    第四十一章 持久对象和SQL - Storage
    C语言之基础语法
    如何给win11安装安卓应用
    明明加了唯一索引,为什么还是产生了重复数据?
    HG/T 5367.5-2022 轨道交通车辆用防结冰涂料检测
    windows环境cmake的nmake failed
    深入浅出MySQL - 架构与执行
    智慧寝室管理系统
    马上2023年了,学一下gradle(Gradle)安装及配置
  • 原文地址:https://blog.csdn.net/weixin_44402395/article/details/128199787