首页 > 编程语言 >C++算法实践07-回文数

C++算法实践07-回文数

时间:2024-07-11 18:31:05浏览次数:15  
标签:false 07 int len C++ str return left 回文

一、题目:

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

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

例如,121 是回文,而 123 不是。

示例 1:输入:x = 121 输出:true

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

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

二、思路:

正常思路就是采用循环取出尾数,然后将数字翻转就可以进行比较原数字和翻转后的数字是否一样,最重要的是要注意翻转后的溢出问题,防止溢出的处理原理在文章C++算法实践06-整数反转详细说明。

第二种思路就是首先使用to_string函数将整型转换为字符串来处理,同样取出第一个字符为‘-’的话直接返回false即可。而后续定义了一个函数str_len用于返回双指针中间的元素个数,如果函数的返回值和原来字符串的长度一样就可以确定这个数是回文数。

三、代码:

1.常规解法:

class Solution 
{
public:
    bool isPalindrome(int x) 
    {
        //当x为负数时一定返回false
        if(x < 0)
        {
            return false;
        }
        int ret=0;
        int result=0;
        int guodu=x;
        while(guodu != 0)
        {
            ret = guodu % 10;
            if(result > 214748364 || (result == 214748364 && ret > 7))
            {
                return false;
            }
            result = result*10 + ret;
            guodu /= 10;
        }
        if(result == x)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
};

2.变换为字符串:

class Solution {
public:
    bool isPalindrome(int x) {
        std::string str = std::to_string(x);
        
        if (str[0] == '-') {
            return false; 
        }
        int len = str.length();
        int left = (len % 2 == 0) ? (len-1)/2 : len/2;
        int ret = str_len(str, left, len % 2 == 0 ? left+1 : left);
        
        return ret == len;
    }

    int str_len(std::string s, int left, int right) {
        while (left >= 0 && right < s.length() && s[left] == s[right]) {
            --left;
            ++right;
        }
        return right - left - 1;
    }
};

标签:false,07,int,len,C++,str,return,left,回文
From: https://blog.csdn.net/qq_51497103/article/details/140355934

相关文章

  • C++算法实践06-整数反转
    一、题目:给你一个32位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1] ,就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输出:-321示例......
  • 2024-07-11 npm publish报错合集
    报错1:ThispackagehasbeenmarkedasprivatenpmERR!你的包被设为私有模式了。npmERR!codeEPRIVATEnpmERR!ThispackagehasbeenmarkedasprivatenpmERR!Removethe'private'fieldfromthepackage.jsontopublishit.原因:你发布的包被标记为私有了,如果......
  • 代码随想录算法训练营第四天 | Python | LeetCode24.两两交换链表中的节点、19.删除链
    LeetCode24.两两交换链表中的节点题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/文章/视频链接:https://programmercarl.com/0024.%E4%B8%A4%E4%B8%A4%E4%BA%A4%E6%8D%A2%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9.html#%E7%AE%9......
  • C++冒泡排序(使用vector动态数组)
    #include<iostream>#include<vector>usingnamespacestd;voidsort(vector<int>&a){  constintsize=a.size();  inttemp;  intflag=1;  while(flag==1)  {  flag=0;  for(inti=0;i<size;++i)  {   if(a[i]>......
  • c++方法
    std::transform方法std::transform是C++标准库算法中的一个非常有用的函数,它定义在头文件中。这个函数用于将给定范围内的每个元素按照指定的操作进行转换,并将转换结果存储在另一个位置(可以是原始范围的另一个容器,或者完全不同的位置)。std::transform提供了一个灵活的......
  • N皇后问题(C++)
    问题描述N皇后问题是一个经典的计算机科学问题,要求在一个N×N的棋盘上放置N个皇后,使得彼此不互相攻击。攻击的定义包括皇后在同一行、同一列或同一对角线上。规则任意两个皇后不能在同一行。任意两个皇后不能在同一列。任意两个皇后不能在同一条斜线上(包括主对角线和副对角......
  • PTA 7-2 数组循环左移--C++
    本题思路:本题可以用数组或者指针来解决问题,本题我们如果我们用数组来解决问题的话,数组循环左移,就相当后面的数组右移过来,如i位置的就相当于i+m的位置的数组,大概这样的思路,就没有问题了#include<iostream>usingnamespacestd;intmain(){intn,m;cin>>n>>m;......
  • C++ 中的 lowbit
    lowbit的定义首先了解lowbit的定义\(lowbit(n)\),为\(n\)的二进制原码中最低的一位\(1\)以及其后面的\(0\)所表示的数举个简单的例子:将\(10\)使用二进制表示为\(1010\)其中最低位的\(1\)为第2位(\(_{10}1_0\),从右往左数)此时\(lowbit(10)\)使用二进制表示为......
  • AI推介-大语言模型LLMs之RAG(检索增强生成)论文速览(arXiv方向):2024.06.20-2024.07.01
    文章目录~1.AStudyonEffectofReferenceKnowledgeChoiceinGeneratingTechnicalContentRelevanttoSAPPhIREModelUsingLargeLanguageModel2.FromRAGtoRICHES:RetrievalInterlacedwithSequenceGeneration3.SK-VQA:SyntheticKnowledgeGeneration......
  • 【2024-07-10】我们的过夜菜
    20:00事情都是想起来千难万险,但事到临头总有办法。                                                 ——约翰.缪尔何太的部门领导还有两年退休,在这位女领导的带领下,......