LeetCode第6~10题解

news2024/11/26 0:50:35

CONTENTS

    • LeetCode 6. N 字形变换(中等)
    • LeetCode 7. 整数反转(中等)
    • LeetCode 8. 字符串转换整数-atoi(中等)

LeetCode 6. N 字形变换(中等)

【题目描述】

将一个给定字符串 s 根据给定的行数 numRows,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"
请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

【示例1】

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"

【示例2】

输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I

【示例3】

输入:s = "A", numRows = 1
输出:"A"

【提示】

1 ≤ s . l e n g t h ≤ 1000 1\le s.length\le 1000 1s.length1000
1 ≤ n u m R o w s ≤ 1000 1\le numRows\le 1000 1numRows1000
s 由英文字母(小写和大写)、',''.' 组成

【分析】


在这里插入图片描述

如上图所示,我们用数字来观察规律,设行数为 n n n

首先看第一行,0到6一共间隔 2 n − 2 2n-2 2n2 个数,因为从0走到3有 n − 1 n-1 n1 个数,3走到6也有 n − 1 n-1 n1 个数,因此第一行为从0开始的公差为 2 n − 2 2n-2 2n2 的等差数列。同理最后一行为从 n − 1 n-1 n1 开始的公差为 2 n − 2 2n-2 2n2 的等差数列。

对于中间行,以第二行为例,由两个等差数列组成,一个是在直线上的数列:1、7、13,这是从1开始的公差为 2 n − 2 2n-2 2n2 的等差数列;还有一个是在斜线上的数列:5、11、17,这是从5(可以看成 2 n − 2 − i 2n-2-i 2n2i i i i 表示这一行的第一个数)开始的公差为 2 n − 2 2n-2 2n2 的等差数列。因此中间行就是先输出第一个等差数列的第一项,然后输出第二个等差数列的第一项,再输出第一个等差数列的第二项,以此类推。


【代码】

class Solution {
public:
    string convert(string s, int n) {
        if (n == 1) return s;  // 特判
        string res;
        for (int i = 0; i < n; i++)
        {
            if (i == 0 || i == n - 1)  // 第一行或最后一行
                for (int j = i; j < s.size(); j += 2 * n - 2)
                    res += s[j];
            else
                // j表示第一个等差数列,k表示第二个等差数列
                for (int j = i, k = 2 * n - 2 - i; j < s.size() || k < s.size(); j += 2 * n - 2, k += 2 * n - 2)
                {
                    if (j < s.size()) res += s[j];
                    if (k < s.size()) res += s[k];
                }
        }
        return res;
    }
};

LeetCode 7. 整数反转(中等)

【题目描述】

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [ − 2 31 , 2 31 − 1 ] [-2^{31}, 2^{31} - 1] [231,2311],就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

【示例1】

输入:x = 123
输出:321

【示例2】

输入:x = -123
输出:-321

【示例3】

输入:x = 120
输出:21

【示例4】

输入:x = 0
输出:0

【提示】

− 2 31 ≤ x ≤ 2 31 − 1 -2^{31}\le x\le 2^{31} - 1 231x2311

【分析】


首先有个小 Tips:C++中负数取模的结果也为负数,如 − 1234 % 10 = − 4 -1234\% 10=-4 1234%10=4

直接用 x % 10 x\% 10 x%10 求出 x x x 的个位数 a a a,然后 r e s = r e s ∗ 10 + a res=res*10+a res=res10+a,根据负数取模的特性易知该方式同样适用于负数。

注意我们当做无法使用 long long 类型,因此做溢出判断的时候需要对判断公式做一个变换。


【代码】

class Solution {
public:
    int reverse(int x) {
        int res = 0;
        while (x)
        {
            // res * 10 + x % 10 > MAX -> res > (MAX - x % 10) / 10
            if (res > 0 && res > (INT_MAX - x % 10) / 10) return 0;
            if (res < 0 && res < (INT_MIN - x % 10) / 10) return 0;
            res = res * 10 + x % 10;  // x不管正负都通用
            x /= 10;
        }
        return res;
    }
};

LeetCode 8. 字符串转换整数-atoi(中等)

【题目描述】

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符串末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正数。如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,“123” -> 123,“0032” -> 32)。如果没有读入数字,则整数为 0。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [ − 2 31 , 2 31 − 1 ] [-2^{31}, 2^{31} - 1] [231,2311],需要截断这个整数,使其保持在这个范围内。具体来说,小于 − 2 31 -2^{31} 231 的整数应该被固定为 − 2 31 -2^{31} 231,大于 2 31 − 1 2^{31}-1 2311 的整数应该被固定为 − 2 31 − 1 -2^{31}-1 2311
  6. 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ' '
  • 除前导空格或数字后的其余字符串外,请勿忽略任何其他字符。

【示例1】

输入:s = "42"
输出:42

【示例2】

输入:s = "   -42"
输出:-42

【示例3】

输入:s = "4193 with words"
输出:4193

【提示】

0 ≤ s . l e n g t h ≤ 200 0\le s.length\le 200 0s.length200
s 由英文字母(大写和小写)、数字(0-9)、' ''+''-''.' 组成

【分析】


模拟处理字符串即可,判断溢出的方式与上一题相似,唯一的一个坑点是负数的最小值的绝对值是比正数的最大值多1的,因此当恰好等于最小值时 r e s res res 存不下对应的正数,因此需要直接返回最小值。


【代码】

class Solution {
public:
    int myAtoi(string s) {
        int idx = 0;
        while (idx < s.size() && s[idx] == ' ') idx++;  // 过滤前导空格
        int op = 1;  // 标记正负,没有正负号时默认为正
        if (s[idx] == '-') op *= -1, idx++;
        else if (s[idx] == '+') idx++;
        int res = 0;
        while (idx < s.size() && s[idx] >= '0' && s[idx] <= '9')
        {
            int x = s[idx] - '0';
            // res * 10 + x > MAX -> res > (MAX - x) / 10
            if (op > 0 && res > (INT_MAX - x) / 10) return INT_MAX;
            // -res * 10 - x < MIN -> -res < (MIN + x) / 10
            if (op < 0 && -res < (INT_MIN + x) / 10) return INT_MIN;
            if (-res * 10 - x == INT_MIN) return INT_MIN;  // 特判刚好等于最小值
            res = res * 10 + x;
            idx++;
        }
        return res * op;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/939018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文搞懂深度信念网络!DBN概念介绍与Pytorch实战

目录 一、概述1.1 深度信念网络的概述1.2 深度信念网络与其他深度学习模型的比较结构层次学习方式训练和优化应用领域 1.3 应用领域图像识别与处理自然语言处理推荐系统语音识别无监督学习与异常检测药物发现与生物信息学 二、结构2.1 受限玻尔兹曼机&#xff08;RBM&#xff0…

第三方ipad笔哪个牌子好用?开学季ipad触控笔推荐

现在&#xff0c;对于ipad用户来说&#xff0c;苹果Pencil系列绝对是他们最好的选择。但价格太贵了&#xff0c;普通用户根本买不起。所以&#xff0c;在实际应用中&#xff0c;选择一种性能好&#xff0c;价格便宜的电容笔就显得尤为重要。身为一名“苹果粉”&#xff0c;又是…

【LeetCode-中等题】24. 两两交换链表中的节点

文章目录 题目方法一&#xff1a;递归方法二&#xff1a;三指针迭代 题目 方法一&#xff1a;递归 图解&#xff1a; 详细版 public ListNode swapPairs(ListNode head) {/*递归法:宗旨就是紧紧抓住原来的函数究竟返回的是什么?作用是什么即可其余的细枝末节不要细究,编译器…

linux删除文件恢复

linux文件恢复救大命 早上不小心将部署文件删除了&#xff0c;内心十分复杂&#xff0c;终于找回部分损失&#xff0c;其中一个非常重要的点是&#xff0c;文件必须得是修改过或者运行过&#xff0c;在服务器中存在进程记录 sudo su # 进入root权限 lsof | grep deploy.py在这…

网络编程嵌套字

网络编程 程序员主要操作应用层和传输层来实现网络编程 也就是自己写一个程序&#xff0c;让这个程序可以使用网络来通信 这个程序属于应用层&#xff0c;实现通讯就需要获取到传输层提供的服务 这就需要使用传输层提供的api UDP&#xff1a;无连接&#xff0c;不可靠传输&a…

Mysql安装使用

Mysql下载: MySQL :: Download MySQL Community Server Mysql解压&#xff1a; 解压后在根目录新建data文件夹和新建my.ini文件 my.ini文件内容如下: 注意&#xff1a;记得修改目录位置 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirD:\\mysql-5.7.30…

完美解决 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

拉取代码时报错&#xff1a; # Mac 报错WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key …

细说GNSS模拟器的RTK功能(一)

什么是RTK&#xff1f; 实时动态载波相位差分技术&#xff08;RTK&#xff09;是通过测试来纠正当前卫星导航&#xff08;GNSS&#xff09;系统常见误差的应用。RTK定位基于至少两个GNSS接收机——参考站和一个或多个流动站。 参考站在可视卫星中获取测量数据&#xff0c;然后…

PMAC使用实点网关模块与西门子1500PLC通讯

PMAC使用实点网关模块与西门子1500PLC通讯 硬件 1.PMAC 2.1500PLC 3.实点GW6-P20HM、GW6L-A0(EhterCat网关)、GW6L-B0(PN网关) 创建pmac程序 添加实点网关模块描述文件 扫描EtherCAT网络节点 右击Master0选择加载映射到Power Pmac&#xff0c;可查看EtherCat映射到pmac的…

亚马逊鲲鹏系统可多渠道提升关键词排名

亚马逊鲲鹏系统有三大渠道可以完全模拟人类真实操作行为&#xff0c;快速提高你产品在亚马逊的排名。有通过搜索、站外引流、直接访问产品三种方法。 通过亚马逊站点搜索&#xff1a;正常的登录到我们的亚马逊的主页&#xff0c;然后通过搜索设置的关键词&#xff0c;然后再进行…

2024年java面试(三)--spring篇

文章目录 1.spring的bean是线程安全的吗&#xff1f;2.什么是Spring IOC 容器&#xff1f;3.DI 依赖注入4.如何实现一个IOC容器5.Spring 的 IoC支持哪些功能&#xff1f;6.IOC初始化过程7.面向切面编程&#xff08;AOP&#xff09;8.AOP 思想9.AOP的应用场景10.AOP通知类型11.S…

linuxdeploy安装CentOS7搭建django服务

目录 一、busybox安装 二、linuxdeploy安装 三、linuxdeploy软件设置及安装 四、CentOS基础环境配置 五、CentOS7 上安装Python3.8.10 六、systemctl的替代品 七、CentOS7 上安装mysql5.2.27数据库 八、CentOS7 上安装Nginx服务 九、Django项目应用部署 参考文献: 一…

【100天精通python】Day46:python网络编程基础与入门

目录 专栏导读 1 网络编程的基础 2. 基本概念和协议 2.1 计算机网络基础 2.2 网络协议、IP地址、端口号 2.3 常见网络协议 3. 套接字编程 3.1 套接字的基本概念 3.2 套接字的基本操作 3.3 套接字通信模型和方法&#xff1a;send、recv 3.3.1 TCP通信模型 3.3.2 U…

模拟实现库函数strcpy以及strlen

目录 strcpy 介绍库函数strcpy 例子 分析模拟实现思路 补充 assert宏 const关键字来修饰源字符串的指针 代码展示 strlen 介绍库函数strcpy 例子 分析模拟实现思路 计数器 递归 指针-指针 代码展示 计数器 递归 指针-指针 strcpy 介绍库函数strcpy 这个库函…

docker 04.更加重要的命令

之前的都是基础命令&#xff0c; 前台交互进程和后台守护进程&#xff1a; 重新进入容器&#xff1a; docker中的导入导出&#xff1a; docker中的拷贝到&#xff1a;

SpringBoot整合OpenAI实现AI聊天 (精简demo)

1. OpenAI官网/*** 官网获取密钥基本条件* * 1. 翻墙, 能访问外网* 2. 拥有国外手机号码* 3. 注册账号* 4. 获取密钥*/https://openai.com/ 2. 获取OpenAI密钥 (怎么简单怎么来) // 直接在淘宝上购买, 买多几个随机访问 sk-xxxx 3. 依赖 <dependency><groupId>c…

智能客服系统:解决企业服务、管理难题的新选择

在数字化时代&#xff0c;智能客服系统是企业服务、管理的新选择。智能客服系统可以通过自然语言处理、人工智能等技术实现与顾客的智能对话&#xff0c;提升企业客服效率和服务质量。同时&#xff0c;智能客服系统也可以为企业提供实时数据分析和监管&#xff0c;进一步优化管…

图解算法--查找算法

目录 查找算法 一、顺序查找 二、二分法查找 三、插值查找法 四、斐波那契查找法 查找算法 查找算法根据数据量的大小&#xff0c;可以将其分为以下两种 内部查找&#xff1a;内部查找是指在内存或内部存储器中进行查找操作的算法。内部查找适用于数据量较小、存储在内存…

实时记录开房信息,在线开房记录查询工具

随着社会的高速发展&#xff0c;异地出差人士越来越多&#xff0c;往往全国跑&#xff0c;每每去到一个地区都要开房休息&#xff0c;当开房数量越来越多的时候&#xff0c;往往会把数据混乱&#xff0c;不利于回公司后的出差费用报销&#xff0c;故此发现了一款实时记录实时查…

h3c多系列路由器存在任意用户登录漏洞

该文章来自作者日常学习笔记&#xff0c;也有部分文章是经过作者授权和其他公众号白名单转载&#xff0c;未经授权&#xff0c;严禁转载&#xff0c;如需转载&#xff0c;联系开白。请勿利用文章内的相关技术从事非法测试&#xff0c;如因此产生的一切不良后果与文章作者无关。…