首页 > 其他分享 >力扣9-回文数

力扣9-回文数

时间:2023-02-20 21:32:16浏览次数:48  
标签:tmp 10 int 力扣 123 result 回文

原题链接:https://leetcode.cn/problems/palindrome-number/ 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是。

解题

看到这个问题,第一个想法是用两个指针,分别取值对比,但这一想法的前提是字符串,可以先将整数x转换为字符串,然后判断是否回文。

转字符串双指针解题

这一方法比较简单,不作举例

反转一半

如果将原整型进行反转,那么反转前后的结果应该相同; 由于是回文数,前半部分和后半部分是对称的; 我们可以只比较前半部分和反转后的后半部分是否相等,来判断该整形是否回文。 同时,由于传入时的数据符合int的存储范围,处理后的数据长度折半,无需考虑数据溢出。

以偶数为例 int x = 123321

  1. 首先对x取余:tmp=1,此时,x=x/10=12332
  2. 同理,tmp=tmp*10+x%10=12x=x/10=1233
  3. 重复这一步,tmp=123,x=123
  4. 此时,tmp等于x,我们可以把这个作为结束循环的条件
  5. 如果不相等,比如tmp=122,我们稍后讨论。

以奇数为例 int x = 12321

  1. 首先对x取余:tmp=1,此时,x=x/10=1232
  2. 同理,tmp=tmp*10+x%10=12x=x/10=123
  3. 重复这一步,tmp=123,x=12
  4. 此时,tmp大于等于x,tmp/10等于x
  5. 由于tmp是三位数,x是两位数,tmp一定大于x,我们可以把此时的情况设为循环结束的条件

寻找规律

  • 循环结束的条件是tmp>=x,如果tmp<x,则继续循环,由于每轮循环位数加一,所以反转到一半时,一定有tmp>=x
  • 当循环结束时,tmp>=x,此时,又分两种情况,tmp等于x时,可以直接返回真
  • tmp大于x时,如果tmp/10等于x,返回真

敲代码

如果文字太抽象,就多看几遍代码 根据力扣的题目要去,负数不算回文数,我们可以在开头加入判断,如果为负数直接返回假

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0 || (x > 0 && x % 10 == 0))return false;
        int result = 0;
        while (result < x)
        {
            result = result * 10 + x % 10;
            x /= 10;
        }
        if (result == x || result / 10 == x)return true;
        return false;
    }
};

运行结果 11510 / 11510 个通过测试用例 执行用时: 8 ms 内存消耗: 5.9 MB image.png

标签:tmp,10,int,力扣,123,result,回文
From: https://blog.51cto.com/wushf/6074465

相关文章

  • 力扣简977 有序数组的平方
    自己写了一版空间占用太高了看了题解差不多也就这样packageLeetcode;/*给你一个按非递减顺序排序的整数数组nums,*返回每个数字的平方组成的新数组,要求也按......
  • 力扣---20. 有效的括号
    给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:   左括号必须用相同类型的右括号闭合。   左括号必须以正确的顺序闭合。 ......
  • 力扣---19. 删除链表的倒数第 N 个结点
    给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=[1],n=1输出:[]示例......
  • 力扣---2347. 最好的扑克手牌
    给你一个整数数组ranks和一个字符数组suit。你有5张扑克牌,第i张牌大小为ranks[i],花色为suits[i]。下述是从好到坏你可能持有的手牌类型:   "Flush":同花,五......
  • 力扣简278 第一个错误的版本
    因为做的是一个题库里的题这道题被划分在二分查找里面其实根本想不到该用二分查找然后直接套了一套二分查找结果可能不太对对于一些形如对搓搓和对错错错的用例会执行......
  • 力扣---17. 电话号码的字母组合
    给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。示例1:输入:d......
  • BM88 判断是否为回文字符串
    classSolution{public:  /**   *代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可   *   *@paramstrstring字符串......
  • 力扣---1237. 找出给定方程的正整数解
    给你一个函数 f(x,y)和一个目标结果z,函数公式未知,请你计算方程f(x,y)==z所有可能的正整数数对x和y。满足条件的结果数对可以按任意顺序返回。尽管函数的具体......
  • 力扣---11. 盛最多水的容器
    给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水......
  • 力扣---5. 最长回文子串
    给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案......