自学内容网 自学内容网

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)!