力扣LeetCode算法题 第8题-字符串转换整数 (atoi)

news/2024/11/17 0:45:39/

以上为题目要求:

/*** @params Leetcode_test007* @return Leetcode_test007* @Author bigeZhong* @disc**请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。** 函数myAtoi(string s) 的算法如下:** 读入字符串并丢弃无用的前导空格* 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。* 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。* 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。* 如果整数数超过 32 位有符号整数范围 [−2^31, 2^31− 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −2^31 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。* 返回整数作为最终结果。* 注意:** 本题中的空白字符只包括空格字符 ' ' 。* 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。***/

 首先的话,我们需要先理解题目意思,就是从一大串字符串中提取出有效的数字,这时候我们就要想到一个专门提取字符串的一个方法

使用character中的isdigit去提取有效数字

那么,我的解题思路是以下几点:

1.该函数的实现思路如下:
2.去除字符串前导空格;
3.判断符号位,如果有符号位则记录符号;
4.转换数字,每次将结果值乘以10再加上当前位的数字,判断是否溢出;
5.返回结果值乘以符号位。

附上我写的代码以及思路:

public static int myAtoi(String s) {//1.去除字符串前导空格,涉及对字符串的使用int index_i = 0;//先判断去除字符串里面的空格,并返回下标while ((index_i < s.length()) && s.charAt(index_i) == ' '){index_i++;}//2.判断符号位,如果有符号位则记录符号;int sign =1;if (index_i<s.length() && (s.charAt(index_i) == '+' || s.charAt(index_i) =='-')){sign = s.charAt(index_i) == '+'?1:-1;index_i++;}//3.使用character中的isdigit去提取有效数字int result = 0;while (index_i<s.length() && Character.isDigit(s.charAt(index_i)) ){int digit = s.charAt(index_i) - '0';// 判断是否溢出if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && digit > 7)) {return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;}result = result * 10 + digit;index_i++;}return result*sign;}

之后查看了下在leetcode中的效果

附上全部的代码,可以粘贴使用:

package com.zhm.test;import java.util.ArrayList;
import java.util.Iterator;/*** @params Leetcode_test007* @return Leetcode_test007* @Author bigeZhong* @disc**请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。** 函数myAtoi(string s) 的算法如下:** 读入字符串并丢弃无用的前导空格* 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。* 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。* 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。* 如果整数数超过 32 位有符号整数范围 [−2^31, 2^31− 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −2^31 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。* 返回整数作为最终结果。* 注意:** 本题中的空白字符只包括空格字符 ' ' 。* 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。***/
public class Leetcode_test008 {/*该函数的实现思路如下:去除字符串前导空格;判断符号位,如果有符号位则记录符号;转换数字,每次将结果值乘以10再加上当前位的数字,判断是否溢出;返回结果值乘以符号位。*/public static int myAtoi(String s) {//1.去除字符串前导空格,涉及对字符串的使用int index_i = 0;//先判断去除字符串里面的空格,并返回下标while ((index_i < s.length()) && s.charAt(index_i) == ' '){index_i++;}//2.判断符号位,如果有符号位则记录符号;int sign =1;if (index_i<s.length() && (s.charAt(index_i) == '+' || s.charAt(index_i) =='-')){sign = s.charAt(index_i) == '+'?1:-1;index_i++;}//3.使用character中的isdigit去提取有效数字int result = 0;while (index_i<s.length() && Character.isDigit(s.charAt(index_i)) ){int digit = s.charAt(index_i) - '0';// 判断是否溢出if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && digit > 7)) {return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;}result = result * 10 + digit;index_i++;}return result*sign;}public static void main(String[] args) {String s1 = "42";String s2 = "     -42";String s3 = "4193 with words";String s4 = "gfsdgsdfgh-6456793 with words";String s5 = "+-12";System.out.println(myAtoi(s1));System.out.println("=============");System.out.println(myAtoi(s2));System.out.println("=============");System.out.println(myAtoi(s3));System.out.println("=============");System.out.println(myAtoi(s4));System.out.println("=============");System.out.println(myAtoi(s5));System.out.println("===111==========");}
}

 

以上为全部的代码实现


http://www.ppmy.cn/news/230475.html

相关文章

自己配的3000主机

此blog为最近关于自己DIY了一台主机所得所想。起因为在拼多多月黑风高活动抢到了一款2T固态硬盘SN750&#xff0c;打算将其换至我的笔记本用&#xff0c;然后从笔记本拆下来的500G固态SN730用来再组装一台主机。还是电脑小白&#xff0c;从中学到了很多词&#xff0c;问显卡锻没…

怎么配置微型计算机,预算万元玩游戏还要含显示器怎么装机?这三套配置总有一套适合你...

对于游戏发烧友来说&#xff0c;他们更在乎的是游戏的体验&#xff0c;预算则是其次的。良好的游戏体验与电脑的性能有直接关系&#xff0c;虽然性能越高越好&#xff0c;但还是要讲求实用。通常来说&#xff0c;一套万元左右的PC就能很好地满足游戏玩家流畅运行各类大型游戏。…

网吧用计算机性能配件清单,网吧主机都是什么配置?看看清单就知道!

很多人热衷于网吧,总感觉在里面玩游戏速度更快,还不会出现这样那样的小问题,很多人开始问,难道网吧电脑配置很高?下面IT买手就罗列一些常用网吧电脑主机的配置单出来,大致看看网吧都是啥配置。 配置清单一:中高档网吧配置 这是好点的网吧,大多数是四核i5+GTX750Ti这样的…

攒机笔记十三:国产固态硬盘

打算选购一个笔记本的2.5寸stat 3.0接口&#xff0c;7mm的固态硬盘&#xff0c;前段时间听说了纯国产硬盘&#xff0c;名叫光威&#xff0c;在这里了解一下。 这个厂家母公司好像不是中国的&#xff0c;之前用的主控和颗粒也不是中国的&#xff0c;本来跟国产不搭边&#xff0…

【目标检测】你想知道的手势识别都在这里 【YOLO】网络

基于YOLOResNet50的手势识别 目录 基于YOLOResNet50的手势识别写在前面&#xff08;一&#xff09;项目背景以及系统环境1.1 项目背景1.2 硬件环境1.3 操作系统1.4 主要界面1.5 开发工具 &#xff08;二&#xff09;前期准备2.1 前言2.2 数据集准备2.3 Yolo数据集的标注2.4 Res…

win7, gtx750ti 2g tensorflow 安装GPU版本,个人总结,步骤比较详细

安装环境&#xff1a;win7, gtx750ti 2g 参考&#xff1a; https://blog.csdn.net/gangeqian2/article/details/79358543 http://blog.sina.com.cn/s/blog_14935c5880102wu86.html https://tensorflow.google.cn/install/install_windows#installing_with_anaconda 1、CUDA与cu…

C++ string的简单应用

C语言的字符串 C的字符串 头文件&#xff1a; #include<string.h> //c #include<string> //C #include<cstring> //C 比较string的大小 两个string对象相加 使用字符串对象来存放字符串 两个string对象相加 string str "Hello,"; st…

SCI期刊写作必备(三):一键生成YOLOv8等主流模型同款图表|绘制目标检测领域YOLO论文常见的性能对比折线图,包含多种不同功能风格对比图表

绘制一个原创属于自己的YOLOv8模型性能对比图表 具体绘制操作参考:(附Python代码,直接一键生成,精度对比图表代码 ) 只需要改动为自己的mAP、Params、FPS、GFlops等数值即可,一键生成 文章目录 绘制一个原创属于自己的YOLOv8模型性能对比图表一键生成 不同风格 图表📈…