leetcode 9. 判断整数是否是回数 Palindrome Number

Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.

注:回数是指正读和倒读都一样的数,如121,234432

解题分析:

需要注意点

(1)负数不是回数

(2)个位数都是回数

思路:

(1)使用前一题的整数的倒序,将一个数倒序,然后和原值比较:存在的问题是可能有溢出,需要计算每一位,影响高效,有改进空间

(2)逐个比较最高位和最低位,不等跳出,相等就比较次高位和次低位,递归结束:高效,但难度是如何取得最高位掐头去尾

程序实现

(1)整数的倒序

bool isPalindrome(int x) {
    long long y = 0;
    int t = x;
    for (; t > 0; t /= 10)
        y = y*10 + t %10;
    if(x == y)
        return true;
    return false; //如果溢出,肯定不等
}

(2)逐个比较最高位和最低位

bool isPalindrome(int x) {
        if (x < 0)
            return false;
        int d = 1;
        while (x / d >= 10) //计算取最高位所需的除数
            d *= 10;
        while (x)
        {
            int high_bit = x / d;
            int low_bit = x % 10;
            if (high_bit != low_bit)
                break;
            x = x % d / 10; //*掐头去尾*
            d = d / 100; //每次踢出2位
        }
        if (x)
            return false;
        return true;
    }
};
时间: 2024-10-07 21:22:24

leetcode 9. 判断整数是否是回数 Palindrome Number的相关文章

判断整数是否是回文数

关于 判断整数是否是回文数 几种解法:一是将整数转化为字符形式,但需要额外空间:二是将数字逆转得到另一个数,判断是否与原数相等,但有可能溢出: 符合要求的方法是从数的两端向中间推进判断:如相等则弃掉首尾数字: bool isPalindrome(int x) { if (x < 0) return false; int div = 1; while (x / div >= 10) { div *= 10; } //算数的量级 while (x != 0) { int l = x / div;

Leetcode 数 Palindrome Number

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Palindrome Number Total Accepted: 12165 Total Submissions: 41736 Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. Some hints: Could negative integ

9. 回文数 Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space. 题意:判断一个数字是否为回文数 如何取得一个Integer的最高位?假设x = 688答:x / mask. 设置一个和x位数一样的mask,mask = 100,然后用x/mask,表示x里面有几个mask,即是最高位数字. 688里有6个100,即为6. 如何删去一个Integer的最高位?假设x = 688答:x = x % mask. 还是

判断一个整数是否是回文数C++实现 leetcode系列(九)

判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 . 从右向左读, 为 121- .因此它不是一个回文数. 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 .因此它不是一个回文数. 这道验证回文数字的题如果将数字转为字符串,就变成了验证回文字符串的题,没啥难度了,我们就直接来做follow up吧

判断一个int 型整数 是否为回文数

leetcode 上的题目 Determine whether an integer is a palindrome. Do this without extra space. 由于不能使用额外空间,所以不能把数字转化为字符串后进行比较.因为这样空间复杂度将为线性. leetcode给出了几点提示 1.判断负数是否为回文数,查了下回文数定义,负数不为回文数 2.就是注意不能把数字转字符串,因为不能用额外空间. 3.如果打算反转数字,需要处理好数字溢出情况 我的解决办法: 先获取数字长度,然后获取

判断一个整数是否为回文数 Check if a number is palindrome

一种方法是先翻转当前数,然后把它和原数比较(略) 另一种是递归方法,借用一个复制数,对原数递归,使之翻转,然后配合复制数比较 package recursion; public class Check_if_a_number_is_palindrome { public static void main(String[] args) { int num = 121321; System.out.println(check(num)); num = 12321; System.out.printl

LeetCode 9 Palindrome Number (回文数)

翻译 确定一个整数是否是回文数.不能使用额外的空间. 一些提示: 负数能不能是回文数呢?(比如,-1) 如果你想将整数转换成字符串,但要注意限制使用额外的空间. 你也可以考虑翻转一个整数. 然而,如果你已经解决了问题"翻转整数(译者注:LeetCode 第七题), 那么你应该知道翻转的整数可能会造成溢出. 你将如何处理这种情况? 这是一个解决该问题更通用的方法. 原文 Determine whether an integer is a palindrome. Do this without ex

LeetCode:Palindrome Number - 回文数

1.题目名称 Palindrome Number(回文数) 2.题目地址 https://leetcode.com/problems/palindrome-number 3.题目内容 英文:Determine whether an integer is a palindrome. Do this without extra space. 中文:确认一个整数是否是回文数 4.解题方法1 将数字翻转后判断与原数字是否相等,可以参考LeetCode第7题(Reverse Integer)的解题思路.J

【c语言】判断一个数是不是回文数

//判断一个数是不是回文数 #include <stdio.h> #include <assert.h> int panduan(int *p) { int t = 0; int n = *p; assert( *p != NULL ); //每次取出最后一个数乘10加到前边去 while( *p != NULL ) { t = t * 10 + *p % 10; *p = *p / 10; } //如果是回文数就会相等 if( t==n ) { return 1; } else