【算法day9】字符串转换整数 (atoi);请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

embedded/2025/3/14 7:54:39/
  1. 字符串转换整数 (atoi)

https://leetcode.cn/problems/string-to-integer-atoi/description/

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

函数 myAtoi(string s) 的算法如下:

空格:读入字符串并丢弃无用的前导空格(" ")
符号:检查下一个字符(假设还未到字符末尾)为 ‘-’ 还是 ‘+’。如果两者都不存在,则假定结果为正。
转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。
舍入:如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被舍入为 −231 ,大于 231 − 1 的整数应该被舍入为 231 − 1 。

返回整数作为最终结果。

在这里插入图片描述

class Solution {
public:int myAtoi(string s) {int s_len = s.size();int cur_idx = 0;int sf = 1; // 符号while (cur_idx < s_len) {if (s[cur_idx] == ' ') {cur_idx++;} else {break;}}if (s[cur_idx] == '+') {sf = 1;} else if (s[cur_idx] == '-') {sf = -1;} else {cur_idx--;}cur_idx++;while (cur_idx < s_len) {if (s[cur_idx] == '0') {cur_idx++;} else {break;}}long long num = 0;int MAX_INT_LENGTH = 12;int start_idx = cur_idx;while (cur_idx < s_len && cur_idx - start_idx < MAX_INT_LENGTH) {if (s[cur_idx] >= '0' && s[cur_idx] <= '9') {num = num * 10 + s[cur_idx] - '0';cur_idx++;} else {break;}}num = num * sf;int MAX_INT = 0x7FFFFFFF;int MIN_INT = MAX_INT * -1 - 1;if (num >= MAX_INT) {return MAX_INT;} else if (num <= MIN_INT) {return MIN_INT;}int ans = num;return ans;}
};

http://www.ppmy.cn/embedded/172445.html

相关文章

FiddlerScript学习笔记

参考官方文档&#xff1a;https://www.fiddlerbook.com/fiddler/dev/scriptsamples.asp json // 反序列化 static function jsonDecode(str : String){return Fiddler.WebFormats.JSON.JsonDecode(str).JSONObject; } // 序列化 static function jsonEncode(jsonObject : Obje…

Doris 数据划分:分区与分桶策略全解析

在 Doris 的分布式架构里&#xff0c;数据划分策略是实现高效存储和查询的关键所在。它主要依靠分区&#xff08;Partition&#xff09;和分桶&#xff08;Bucket&#xff09;这两层逻辑划分&#xff0c;对数据的分布进行精细化管理。本文将深入探讨这两种策略的设计思路、实际…

4-002:如何使用 MySQL 的 EXPLAIN 语句进行查询分析?

EXPLAIN 是 MySQL 中用于分析查询性能的工具&#xff0c;能够帮助你理解查询的执行计划。通过 EXPLAIN&#xff0c;你可以查看 MySQL 如何执行查询&#xff0c;包括使用的索引、表连接顺序等信息。 基本用法 在查询前加上 EXPLAIN 即可&#xff1a; EXPLAIN SELECT * FROM y…

在 Linux 64 位系统上安装 Oracle 11g R2 数据库的完整指南

linux.x64_11gR2_database 是 Oracle 数据库 11g 第 2 版&#xff08;11g Release 2&#xff09;的安装包&#xff0c;适用于 64 位 Linux 操作系统。这个安装包包含了在 64 位 Linux 系统上安装 Oracle 数据库所需的全部文件和组件。 安装步骤概述 以下是在 Linux 系统上安装…

c语言闯算法--常用技巧

双指针 类别&#xff1a; 同向快慢指针 异常情况&#xff0c;慢指针才动 双向指针 视情况&#xff0c;左右指针动 最长无重复子串 int max(int a, int b){if(a < b){return b;}else{return a;} } int lengthOfLongestSubstring(char* s) {int count[300];for(int i 0; i …

红帆 iOffice M2 移动端密码爆破的渗透测试思路,绕过客户端实现Burpsuite批量跑,分享渗透思路,共建网络安全

一、本文概述 今天来自于领导的一个需求,需要对甲方的红帆 ioffice M2进行一次渗透测试【有授权书的】,拿到对应的APP和接口以后,我发现了进行不下去的一个关键点,他家的OA只有APP端,没有Web端,而且密码被加密了。 二、开始分析 红帆 iOffice M2,在登录的过程中,涉及…

自定义日志回调函数实现第三方库日志集成:从理论到实战

一、应用场景与痛点分析 在开发过程中&#xff0c;我们经常会遇到以下场景&#xff1a; 日志格式统一&#xff1a;第三方库使用自己的日志格式&#xff0c;导致系统日志混杂&#xff0c;难以统一管理和分析。日志分级过滤&#xff1a;需要动态调整第三方库的日志输出级别&…

完全二叉树节点的数量 平衡二叉树

1.给出一个完全二叉树&#xff0c;求出该树的节点个数 #include <bits/stdc.h> using namespace std; struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x) { valx; leftNULL; rightNULL; } …