前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >leetcode回文数

leetcode回文数

原创
作者头像
Anime_Bucket
发布2025-03-07 17:18:01
发布2025-03-07 17:18:01
3200
代码可运行
举报
文章被收录于专栏:LeetCode刷题-WPLeetCode刷题-WP
运行总次数:0
代码可运行

题目

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

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

例题:

示例 1:

输入:x = 121 输出:true

示例 2:

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

示例 3:

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

思路:

我们首先来看看代码:

代码语言:javascript
代码运行次数:0
复制
 #include <stdio.h>
 #include <stdbool.h>            //使得可以使用bool类型。
 #include <string.h>
 ​
 bool isPalindrome(int x) {
     // 负数不是回文数
     if (x < 0) {
         return false;
     }
 ​
     // 将整数转换为字符串
     char num[20];
     sprintf(num, "%d", x);
 ​
     // 获取字符串长度
     int length = strlen(num);
 ​
     // 判断是否是回文数
     for (int i = 0; i < length / 2; i++) {
         if (num[i] != num[length - i - 1]) {
             return false;                           // 如果有不匹配的字符,返回 false
         }
     }
 ​
     return true;                                    // 如果所有字符都匹配,返回 true
 }
 ​
 int main() {
     int number;
     printf("请输入一个整数:");
     scanf("%d", &number);
 ​
     if (isPalindrome(number)) {
         printf("%d 是回文数。\n", number);
     } else {
         printf("%d 不是回文数。\n", number);
     }
 ​
     return 0;
 }

首先我们需要去判断它是不是一个负数,因为如果是一个负数的话,那么它一定不是一个回文数,上面的例题二有写。

然后我们要去判断这个数的前半部分和后半部分的话,我么是不是得知道这个数有几位?我使用的是进阶做法,将我们的整数格式化为字符串,这样做的效率会更加高。当我们知道了他又几位之后,我们就可以使用for循环的遍历了。然后我们就去分析正着的数和反着的数是不是一样的,如果一样的话,就是回文数。不一样的话,就不是。但是有一个不错的想法是这样的,假如说我们的x=12321那我们是不是可以只让我们的i遍历到这个数的一半,我们让前半段和后半段做比较,如果相同,是不是也能说明这个是一个回文数。

扩展:

什么是sprintf函数?

C 库函数 int sprintf(char \*str, const char \*format, ...) 发送格式化输出到 str 所指向的字符串。

下面是 sprintf() 函数的声明。

代码语言:javascript
代码运行次数:0
复制
 int sprintf(char *str, const char *format, ...)
  • str -- 这是指向一个字符数组的指针,该数组存储了 C 字符串。
  • format -- 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。

如果我们想要把一个整数转换成字符串的话,我们可以这样:

代码语言:javascript
代码运行次数:0
复制
 sprintf(str, "%d", format);

如果是将字符串直接复制到目标字符数组中。

我们就可以使用%s

代码语言:javascript
代码运行次数:0
复制
 sprintf(str, "%s", format);

问题:

我在本次题目中遇到过一下几个问题:

preview
preview

我使用的是C99的解释器,但是我这里提示到了说是不能识别到bool类型。

可能原因有一下几个:

  1. 未包含<stdbool.h>头文件
  2. 编译器不支持 C99 或更新标准

然后我加入了<stdbool.h>的头文件之后,发现就可以使用这个类型了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
    • 例题:
  • 思路:
    • 扩展:
  • 问题:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档