首页 > 其他分享 >菜鸟的Leetcode(02)

菜鸟的Leetcode(02)

时间:2024-07-10 14:00:30浏览次数:17  
标签:02 std return int 菜鸟 len str 字符串 Leetcode

系列文章目录


第1章  求和
第2章  回文

文章目录

一、题目

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

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

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

(Leetcode编号:09)

二、知识点

1.运算

2.栈

3.双指针

三、解题步骤

1.思路

大方向

(1)数学

设x等于abcdefg,逆x为rex

1.x % 10 =>  x的最后一位取出,g   + 条件1 :x / 10 > 1  //判断循环结束

2.g * 10 = g0

3.x = abcdef  % 10 = f

4.g0 + f =gf

法1.完全循环

rex ?= x

bool isPalindrome(int x) {
    if(x < 0)
        return false;
    long int rex = 0;
    long int n = x;
    while(n!=0)            //n为整型,n<1时,取整为0
    {
        rex = rex * 10 + n % 10;
        n = n / 10;
    }
    if(rex == x)
    return true;
    else
    return false;
}

法2.循环一半(x / 10,同时变化)

1.rex < x 时,循环ing

2.3.rex = x 时,循环结束,真

3.rex > x 时,循环结束,假

【1】末尾为0时,可判断为x ?= 0,提前结束

【2】x = abcde时,即以中间数,左右对称

class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0||(x % 10 == 0 && x != 0)){
            return false;
        }
        int rex = 0;
        while(x > rex){
            rex = rex * 10 + x % 10;
            x = x / 10;                      //x也变化
        }
        return x == rex ||x == rex/10;      //[2] x = abcde
    }
}

法0:给变量 i 记录 x % 10 的次数(多余)

法1:std::string str = std::to_string(x)后,int i = strlen(str)(多余)

在C中,gpt表示有

//在C语言中,可以使用snprintf函数将数字转换为字符串。
//这个函数允许你指定一个最大长度,以防止溢出。这是一个示例:

#include <stdio.h>

int main() {
    int num = 123456789;
    char str[20];

    snprintf(str, sizeof(str), "%d", num);

    printf("数字转化为字符串: %s", str);

    return 0;
}

//在这个例子中,我们使用snprintf函数将整数num转换为字符串,并将结果存储在字符数组str中。
//sizeof(str)用于确定最大转换长度,防止溢出。

(2)字符串&栈

1.数字转化字符串,std::string str = std::to_string(x)后,strlen(str)

2.push一半栈

(2.5)字符串&双指针

1.数字转化字符串,std::string str = std::to_string(x)后,strlen(str)

2.双指针头尾

#include <string>

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) return false;             // 如果数字是负数,则不是回文数
        std::string str = std::to_string(x); // 将整数转换为字符串
        int len = str.length();              // 获取字符串的长度
        int left = 0, right = len - 1;       // 初始化左右指针

        // 从两端向中间遍历字符串,比较字符是否相等
        while (left < right) {
            if (str[left] != str[right]) {
                return false;
            }
            left++;
            right--;
        }

        return true; // 如果所有字符都相等,则是回文数
    }
};

2.实现

(2)字符串&栈(有<stack>)

#include <string>
#include <stack>

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) return false;              // 如果数字是负数,则不是回文数
        std::string str = std::to_string(x);  // 将整数转换为字符串
        int len = str.length();               // 获取字符串的长度
        std::stack<char> s;                   // 创建一个栈来存储一半的字符

                                                
        for (int i = 0; i < len / 2; ++i) {
            s.push(str[i]);
        }                                    // 将字符串的前半部分字符压入栈中

                                              // 检查数字是否有奇数个字符
        int start = (len % 2 == 0) ? len / 2 : (len / 2) + 1;
        //str的中间为开始比较的位置start
        
        for (int i = start; i < len; ++i) {
            if (s.empty() || s.top() != str[i]) {     
                // 从栈中弹出字符并与字符串的后半部分进行比较
                return false;
            }
            s.pop();
        }

        return s.empty(); // 如果栈为空,则是回文数
    }
};

(无<stack>) 

#include <string>

class Stack {
private:
    std::string elements;             // 用于存储栈元素的字符串

public:
    void push(char c) {
        elements += c;                 // 将字符添加到字符串的末尾,相当于入栈操作
    }

    bool empty() const {
        return elements.empty();         // 检查栈是否为空
    }

    char pop() {
        char topElement = elements.back();  // 获取栈顶元素(字符串的最后一个字符)
        elements.pop_back();                // 移除栈顶元素(从字符串中删除最后一个字符)
        return topElement;                  // 返回栈顶元素
    }
};

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) return false;                 // 如果数字是负数,则不是回文数
        std::string str = std::to_string(x);     // 将整数转换为字符串
        int len = str.length();                 // 获取字符串的长度
        Stack s;                                 // 创建一个栈来存储一半的字符

        // 将字符串的前半部分字符压入栈中
        for (int i = 0; i < len / 2; ++i) {
            s.push(str[i]); // 将当前字符压入栈中
        }

        // 检查数字是否有奇数个字符
        int start = (len % 2 == 0) ? len / 2 : (len / 2) + 1;

        // 从栈中弹出字符并与字符串的后半部分进行比较
        for (int i = start; i < len; ++i) {
            if (s.empty() || s.pop() != str[i]) { 
            // 如果栈为空或栈顶元素与当前字符不匹配
                return false;                 // 不是回文数
            }
        }

        return s.empty();                     // 如果栈为空,则是回文数
    }
};

3.演示

4.其他

1.栈

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100

typedef struct {
    int data[MAX_SIZE];
    int top;
} Stack;

// 初始化栈
void init(Stack *s) {
    s->top = -1;
}

// 判断栈是否为空
int isEmpty(Stack *s) {
    return s->top == -1;
}

// 入栈操作
void push(Stack *s, int value) {
    if (s->top >= MAX_SIZE - 1) {
        printf("栈已满,无法添加元素");
        return;
    }
    s->data[++(s->top)] = value;
}

// 出栈操作
int pop(Stack *s) {
    if (isEmpty(s)) {
        printf("栈为空,无法弹出元素");
        return -1;
    }
    return s->data[(s->top)--];
}

// 获取栈顶元素
int peek(Stack *s) {
    if (isEmpty(s)) {
        printf("栈为空,无法获取栈顶元素");
        return -1;
    }
    return s->data[s->top];
}

栈是特殊的数组或链表,先进后出,这个栈是由数组变化而来


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Leetcode编号:09的解题步骤

标签:02,std,return,int,菜鸟,len,str,字符串,Leetcode
From: https://blog.csdn.net/2302_79189136/article/details/140299876

相关文章

  • YOLOv8原创改进:backbone主干改进 | 微软新作StarNet:超强轻量级Backbone | CVPR 2024
     ......
  • 【2023-2024第二学期】助教工作学期总结
    一、助教工作的具体职责和任务1、帮助同学解答问题2、批改同学们的作业3、在实验课上引导同学们排错,加深对实验内容的理解4、及时向老师反馈同学们的问题5、负责开实验室,最后一个离开实验室检查所有设备是否都关6、考前在实验室帮助同学们复......
  • Matebook14 2020款 更换固态(全流程)
    Matebook142020款更换固态全流程因为工作的原因需要升级存储,我的老款的Matebook14只有512G。网络上的中文教程普遍比较古老。特此写下这篇笔记希望能帮助到有需要的朋友。工具螺丝刀(四花00和六花T4)新的固态硬盘U盘(容量不小于1G)移动硬盘(容量不能小于你的系统镜像)操作流......
  • 代码随想录算法训练营第五天 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数
    代码随想录算法训练营第五天|242.有效的字母异位词349.两个数组的交集202.快乐数1.两数之和最近有点忙,哈希表章节的博客可能没有以前那么多图和那么详细了。不过忙完这段时间我可能会回来补的。有效字母异位词题目链接/文章讲解/视频讲解:https://programmercar......
  • 【02】计算两数相乘
    A*B问题题目描述输入两个正整数AAA和BBB,求......
  • CvT:微软提出结合CNN的ViT架构 | 2021 arxiv
    CvT将Transformer与CNN在图像识别任务中的优势相结合,从CNN中借鉴了多阶段的层级结构设计,同时引入了ConvolutionalTokenEmbedding和ConvolutionalProjection操作增强局部建模能力,在保持计算效率的同时实现了卓越的性能。此外,由于卷积的引入增强了局部上下文建模能力,CvT不再需要......
  • 02_国内外四旋翼飞行器的研究现状
    目录四旋翼飞行器发展历史国外研究现状国内研究现状四旋翼飞行器发展历史四旋翼飞行器在诞生之初,由于传感器、微处理器等的发展还不是特别成熟,其发展受到了许多局限,也迟迟不能进入实用阶段。世界上第一架四旋翼飞行器GyroplaneNo.1(如图1.2.1所示)在1907年成功升空,它......
  • 骨传导耳机哪个牌子好?精选2024年度最值得入手的5款骨传导耳机推荐!
    作为在数码耳机领域有着多年工作经验的达人,我见证过骨传导耳机市场的热门,也目睹了不少因盲目选购而导致听力不适或体验不佳的案例。在此,我必须郑重告诫大家,切莫轻信市场上那些夸大其词、声称完美兼顾音质与舒适度的骨传导耳机宣传!实际上,这些劣质机型不仅戴着不舒服,而且音质模糊......
  • 《用Python学数学-2021》 ([美] 彼得 • 法雷尔(Peter Farrell) [Farrell) etc.)
    pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso提取码:jqso一、问题背景高等数学应用非常广,基本上涉及到函数的地方都要用到微积分,还有在几何方面也是如此,计算机的应用让我们能简单快速处理各种高等数学中的计算,比如极限、导数、积分、微分方程等的计算。二、实验目的......
  • 20240709(byte数据转换、字典数据选择性保留、选择性查询数据库)
    需要补的知识:​ 1.HTTP协议,url里,那些header、body里都是啥东西报错信息:"服务异常'bytes'objecthasnoattribute'get'"错误原因:​ http传输中,GET方法传入的是byte格式的数据,没有.get方法#假设你有一个包含JSON数据的字节字符串json_bytes=b'{"name":"John",&quo......