leetcode回文数
题目
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例题:
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
思路:
我们首先来看看代码:
1 |
|
首先我们需要去判断它是不是一个负数,因为如果是一个负数的话,那么它一定不是一个回文数,上面的例题二有写。
然后我们要去判断这个数的前半部分和后半部分的话,我么是不是得知道这个数有几位?我使用的是进阶做法,将我们的整数格式化为字符串,这样做的效率会更加高。当我们知道了他又几位之后,我们就可以使用for循环的遍历了。然后我们就去分析正着的数和反着的数是不是一样的,如果一样的话,就是回文数。不一样的话,就不是。但是有一个不错的想法是这样的,假如说我们的x=12321
那我们是不是可以只让我们的i遍历到这个数的一半,我们让前半段和后半段做比较,如果相同,是不是也能说明这个是一个回文数。
扩展:
什么是sprintf
函数?
C 库函数 int sprintf(char \*str, const char \*format, ...)
发送格式化输出到 str
所指向的字符串。
下面是 sprintf() 函数的声明。
1 | int sprintf(char *str, const char *format, ...) |
str
– 这是指向一个字符数组的指针,该数组存储了 C 字符串。format
– 这是字符串,包含了要被写入到字符串str
的文本。它可以包含嵌入的format
标签,format
标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
如果我们想要把一个整数转换成字符串的话,我们可以这样:
1 | sprintf(str, "%d", format); |
如果是将字符串直接复制到目标字符数组中。
我们就可以使用%s
1 | sprintf(str, "%s", format); |
问题:
我在本次题目中遇到过一下几个问题:
我使用的是C99的解释器,但是我这里提示到了说是不能识别到bool类型。
可能原因有一下几个:
未包含
<stdbool.h>
头文件编译器不支持
C99
或更新标准
然后我加入了<stdbool.h>的头文件之后,发现就可以使用这个类型了。