9. 回文数 Leetcode Tencent 50 Task 41
描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
1 | 输入: 121 |
示例 2:
1 | 输入: -121 |
示例 3:
1 | 输入: 10 |
进阶:
你能不将整数转为字符串来解决这个问题吗?
来源:力扣(LeetCode)
链接:[9. Palindrome Number]https://leetcode-cn.com/problems/palindrome-number
解题思路
既然题干已经说明了不能将整数转化为字符串,那么本题的解法只能对整数本身进行操作了。主要的思路就是用%和/来获得整数的最低位和最高位,然后进行比较,遇到不相等则返回false。主要步骤如下:
- 显然x如果是负数,那么一定不会回文串
- 首先需要找到x的位数所对应的能够通过求余取得x最高位的整数
div,听起来很拗口,举个例子,比如x是三位数,那么需要求得得整数是100,如果x是4位数,那么需要求得得整数是1000,以此类推 - 然后定义两个头尾指针,因为要移动,就姑且叫它指针吧,左边通过
x / div获取x的最高位,记为left,右边通过x % 10获取x的最低位,记为right - 然后去除已经比较过的头尾两个数,通过
x % div去除头指针,再将这个结果除以10去除尾指针 - 最后
div也要相应减少两位:div / = 100 - 直到
x>0不成立跳出循环,返回true
具体代码如下:
代码
1 |
|