L8.【LeetCode笔记】回文数
1.题目
https://leetcode.cn/problems/palindrome-number/description/
给你一个整数
x
,如果x
是一个回文整数,返回true
;否则,返回false
。回文数
是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。示例 1:
输入:x = 121 输出:true示例 2:
输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:
输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。提示:
-231 <= x <= 231 - 1
进阶:你能不将整数转为字符串来解决这个问题吗?
2.自解
由题可知:
1.负数不是回文数
2.判断回文数的算法:
1.如果不将整数转为字符串
分别取出回文数的每个位,再乘以10的次方
如121%10==1;12%10=2;1%10=1-->1*100+2*10+1*1==121;121==121,为回文数
143%10==3;14%10=4;1%10=1-->3*100+4*10+1*1==341,341!=143,不为回文数
2.如果将整数转为字符串
双指针访问
方法1:不将整数转为字符串
代码
bool isPalindrome(int x)
{
if (x<0)
return false;
if (x==0)
return true;
int save_x=x;
int save_x_=x;
int length=0;
int sum=0;
while (x)
{
x/=10;
length++;
}
while (save_x)
{
sum+=(save_x%10)*pow(10,length-1);
save_x/=10;
length--;
}
if (sum==save_x_)
return true;
else
return false;
}
运行结果
方法2:将整数转为字符串+双指针访问
代码
bool isPalindrome(int x)
{
if (x < 0)
return false;
if (x==0)
return true;
char arr[11] = { 0 };
int length = 0;
char* left = NULL;
char* right = NULL;
while (x)
{
arr[length] = x % 10;
x /= 10;
length++;
}
left = &arr[0];
right = &arr[length-1];
while (left < right)
{
if (*left == *right)
{
left++;
right--;
continue;
}
else
return false;
}
return true;
}
注:&arr[length-1]的另一种写法&(*(arr+length-1))
运行结果
原文地址:https://blog.csdn.net/2401_85828611/article/details/143641084
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!