LeetCode—Palindrome Number 数字是否是回文数字

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

检测当前数字是否是回文数字,同时不能增加额外的内存空间,这里一个注意的点就是 负数 都不可能是回文数字

然后是检测出来每一位数字进行比较

代码还是写得比较繁琐,主要的一个点就是数字的位数是基数位和偶数位的时候处理的过程是不同的

class Solution {
public:
int GetH(int x,int num)//获得对应位置的数字
{
	while(num)
	{
		x = x/10;
		num--;
	}
	return x%10;
}
bool isPalindrome(int x) {
    if(x < 0)
    {
        return false;
    }
	int Hnum = 0;
	int y = x;
	while(y)
	{
		Hnum++; //记录数字一共有多少位
		y = y/10;
	}
	if(Hnum&1)//<奇数位数
	{
		int num = Hnum/2;//<d
		int i = 1;
		while(i <= num)
		{
			int h = GetH(x,num-i);
			int l = GetH(x,num+i);
			if(h!= l)
			{
				return false;
			}
			i++;
		}
	}
	else
	{
		int num = Hnum/2;
		int i = 0;
		while(i < num)
		{
			int h = GetH(x,num+i);
			int l = GetH(x,num-1-i);
			if(h!= l)
			{
				return false;
			}
			i++;
		}
	}
	return true;
}
};

还是贴出一些网上比较好的解法:

这里用到一个base直接计算出来最高位的级别,100 、1000,100000......在做的时候直接利用除法

而且这里比较的时候是从两边向中间进行比较,那么这个时候数位的奇偶位置就不再显得重要,也就不需要写分支

所以: 如果是数位之间的比较,最好是利用头尾之间进行比较。

class Solution {
public:
    bool isPalindrome(int x) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if (x < 0)
            return false;
        if (x == 0)
            return true;

        int base = 1;
        while(x / base >= 10)
            base *= 10;

        while(x)
        {
            int leftDigit = x / base;
            int rightDigit = x % 10;
            if (leftDigit != rightDigit)
                return false;

            x -= base * leftDigit;
            base /= 100;
            x /= 10;
        }

        return true;
    }
};
时间: 2024-10-09 15:28:23

LeetCode—Palindrome Number 数字是否是回文数字的相关文章

判断一个数字是否是回文数字,如果是则打印出100以内的回文数字,若不是只给出提示信息。

回文数字指的是什么呢?什么是回文数字呢? 回文数字的特征是:一组数字,从左读和从右读都是一样的,比如:123.123321.12345654321 public class HuiWenTest{    public static void main(String[] args)    {        Scanner sc = new Scanner(System.in); try        {            System.out.println("请输入你要判断的数字: &quo

9 Palindrome Number(判断是否为回文数Easy)

题目意思:判断是否为回文数,不许使用额外空间 ps:一直不理解额外空间的意思,int能用吗 思路:1.比较头尾 2.翻转,越界问题需考虑 1 class Solution { 2 public: 3 bool isPalindrome(int x) { 4 if(x<0)return false; 5 if(x==0)return true; 6 int start,end,num=0,temp=x; 7 while(temp){ 8 num++; 9 temp=temp/10; 10 } 11

java语言判断一个数字是否为回文数字

判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 . 从右向左读, 为 121- .因此它不是一个回文数. 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 .因此它不是一个回文数. 进阶: 你能不将整数转为字符串来解决这个问题吗? 解法一:使用字符串反转,比较反转前后的字符串是否相等 class

1503140110-蓝桥杯-历届试题 回文数字

历届试题 回文数字 时间限制:1.0s   内存限制:256.0MB 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入的整数. 输入格式 一个正整数 n (10<n<100), 表示要求满足的数位和. 输出格式 若干行,每行包含一个满足要求的5位或6位整数. 数字按从小到大的顺序排列. 如果没有满足条件的,输出:-1 样例

算法笔记_181:历届试题 回文数字(Java)

目录 1 问题描述 2 解决方案   1 问题描述 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入的整数. 输入格式 一个正整数 n (10<n<100), 表示要求满足的数位和. 输出格式 若干行,每行包含一个满足要求的5位或6位整数. 数字按从小到大的顺序排列. 如果没有满足条件的,输出:-1 样例输入 44 样例输

【蓝桥杯】PREV-21 回文数字

题目链接:http://lx.lanqiao.org/problem.page?gpid=T113 历届试题 回文数字 时间限制:1.0s   内存限制:256.0MB 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入的整数. 输入格式 一个正整数 n (10<n<100), 表示要求满足的数位和. 输出格式 若干行,每行

条件结构的实例-水仙花数、猜拳游戏、回文数字

1.判断输入的数是否为水仙花数 int num,ge,shi,bai,he;  //声明变量 printf("请输入三位数");  //由用户输入一个三位数 scanf("%d",&num);   //将用户输入的数字保存给num //用户输入的数=个位的三次方+ 十位数的三次方+ 百位数的三次方 //1.从num获取个位 ge=num%10; //2.从num获取十位 shi=num/10%10; //3.从num获取百位 bai=num/100; he=

蓝桥杯:回文数字

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;}

蓝桥杯 - 回文数字 (字符串!!)

问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做:回文数字. 本题要求你找到一些5位或6位的十进制数字.满足如下要求: 该数字的各个数位之和等于输入的整数. 输入格式 一个正整数 n (10<n<100), 表示要求满足的数位和. 输出格式 若干行,每行包含一个满足要求的5位或6位整数. 数字按从小到大的顺序排列. 如果没有满足条件的,输出:-1 样例输入 44 样例输出 99899 499994 589985 5988