最近更新于 2024-05-05 14:18
题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
1.负数不是回文数,直接排除。
2.零是回文数,直接确定。
3.在不是 0 的情况下,以 0 结尾的数不是回文数,如 1230 倒序后为 321,就是判断是否能被 10 整除。
4.在排除前面的情况后,就是将原数与倒序后的数比较,相等就是回文数。现在的关键点就在倒序上,可以将数字转为字符串,然后倒序;也可以直接基于数字处理进行倒序。
代码
- 数字处理
bool isPalindrome(int x) { if (x < 0) { return false; } else if (x == 0) { return true; } else if (x % 10 == 0) { return false; } unsigned int reverse = 0; int src = x; while (x) { reverse *= 10; reverse += (x % 10); x /= 10; } if (reverse == src) { return true; } return false; }
- 字符串处理
#include <stdio.h> #include <string.h> bool isPalindrome(int x) { if (x < 0) { return false; } else if (x == 0) { return true; } else if (x % 10 == 0) { return false; } static char src[11], reverse[11]; memset(src, '\0', sizeof(src)); memset(reverse, '\0', sizeof(reverse)); sprintf(src, "%d", x); for (int i = 9, j = 0; i >= 0; --i) { if (src[i] == '\0') { continue; } reverse[j] = src[i]; ++j; } if (strcmp(src, reverse) == 0) { return true; } return false; }
回文数