把字符串转换成整数(最详细解答)

article/2025/10/2 23:00:09

题目要求:

分析:

  • 把一个一个字符以整数的形式来进行输出,需要考虑相互转化的问题
  • 不能使用库函数!!!
  • 首尾会有空格(进行去空格操作,可以减少不必要的判断)
  • 区分正负正数
  • 结果可能会越界,题目给的是Integer类型,当超过最大范围或者小于最小范围,有不同同的结果输出
  • 不是有效转换要和越界区分开来,当首个字符是字母时或者字符数组的长度为0时,属于无效转换需要返回0

具体解题思路,代码注释全有(几乎每一行都进行了说明) 

class Solution {public int strToInt(String str) {//去掉首尾的空格char[] arr1 = str.trim().toCharArray();//如果字符数组的长度为0时,没办法转化,直接返回0if(arr1.length == 0){return 0;}//记录符号位 (默认是正数,若是负数将sign置为-1)int sign = 1;//默认是负数,字符数组的1号位置开始遍历,若是正数,将i置为0int i = 1;//判断第一个位置//是负号就将sign置为-1,并且不用更改其实判断位置iif(arr1[0] == '-'){sign = -1;}//如果不是正号也不是负号就从0号位置开始//有正号和没有正号不影响符号位,但是影响起始判断位置if(arr1[0] != '+' && arr1[0] != '-'){i = 0;}//定义一个值,来进行判断(判断条件时会解释)int value = Integer.MAX_VALUE / 10;//记录返回值int result = 0;for(int j = i;j < arr1.length;j++){//如果字符大于ascii码表中的范围说明是字母直接跳出if(arr1[j] > '9' || arr1[j] < '0'){break;}/*1.到这一步时,起码证明arr1[1]这是一个数字2.result > value 时,我们还没进行扩大倍数的运算,但是他已经比value大了,做完扩大倍数运算肯定会越界3.当result == value时,不一定会越界,所以取决于后面的个位,如果个位大于Integer最大范围的个位时,那就一定会越界4.为什么result == value时不一定越界?后续运算是 result * 10那么此时做完运算后,等于又回到了和value相等的情况,而不是Integer的最大范围所在的那个值,因此,越界与否完全取决于个位情况*/if(result > value || (result == value && arr1[j] > '7')){//在这里返回的结果不是不能不能有效运算,而是已经越界,不能返回0//需进行两步:1.如果sign == 1,说明时正数,返回最大范围//           2.如果不是,那说明是负数,返回最小范围就可以了return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE ; }/*1.result每更新时在前面的基础上* 10,就相当于把上一次的计算结果扩大了10倍后面的每次做加法时,加上去的永远是个位2.不能直接进行char和int类型的转化,在ascii码表上的1并不是int的1因此借助char类型之间的减法可以将其转化为int(arr1[j]- '0')代表着 '?' - '0',可以理解为我们将'0'当做理想的0*/result = result * 10 + (arr1[j] - '0');}//将符号位与结果结合,正数等于没有做变化,若负数,将等于将这个正数转为其相反数return sign * result;}
}

http://chatgpt.dhexx.cn/article/b0iNfPAM.shtml

相关文章

高并发系统架构设计之微服务篇19: 微服务拆分

文章目录 引言一、一体化架构的痛点1. 技术层面数据库连接数成为系统瓶颈2. 一体化架构增加了研发的成本&#xff0c;抑制了研发效率3. 一体化架构对于系统的运维也会有很大的影响。 二、如何解决这些痛点小结 引言 通过前面几个篇章的内容&#xff0c;你已经从数据库、缓存和…

理解分布式系统中的垂直拆分和水平拆分

概念 水平拆分简单字面意思是&#xff1a;水平方向上由一个拆分为多个。垂直拆分简单字面意思是&#xff1a;垂直方向上由一个拆分为多个。 1&#xff0c;垂直拆分 垂直拆分指按照功能进行拆分&#xff0c;秉着“专业的人干专业的事”的原则&#xff0c;把一个复杂的功能拆分…

垂直拆分和水平拆分

概念介绍 垂直拆分   垂直拆分就是要把表按模块划分到不同数据库表中&#xff08;当然原则还是不破坏第三范式&#xff09;&#xff0c;这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候&#xff0c;只有小量的人来开发和维护&#xff0c;各模块和表都在…

软件架构设计之系统耦合性拆分

软件架构设计之系统模块的拆分 基本概念功能模块循环依赖问题 模块拆分原则高内聚性低耦合性 模块拆分方式模块拆分示例业务需求业务分析项目原始代码需求重构项目代码重构 总结 基本概念 功能模块拆分: 全面了解业务需求后,以寻找大量内聚性调用确定模块边界为目的,以寻求应用…

浅谈系统拆分

今晚好冷啊&#xff0c;回去的路上&#xff0c;我突然想到一件关于系统拆分的事情。举的例子很极端&#xff0c;仅供参考&#xff0c;不一定有实际的意义 我感觉拆分系统&#xff0c;和拆分代码&#xff0c;本质上是一样的。小到一个方法&#xff0c;大到几个系统&#xff0c;都…

分布式AKF拆分原则

1. 前言 当我们需要分布式系统提供更强的性能时&#xff0c;该怎样扩展系统呢&#xff1f;什么时候该加机器&#xff1f;什么时候该重构代码&#xff1f;扩容时&#xff0c;究竟该选择哈希算法还是最小连接数算法&#xff0c;才能有效提升性能&#xff1f; 在面对 Scalabilit…

记一次业务系统拆分的数据迁移及系统切换事项

一.迁移背景 老系统使用商业化软件&#xff0c;同时包含模块较多&#xff0c;架构无法支撑&#xff0c;维护成本高等考虑&#xff0c;需要根据业务模块拆分多个系统&#xff0c;新系统支持水平扩缩容 &#xff0c;rcp框架等&#xff0c;新系统基本上包含常用的技术栈&#xff…

拆分盘系统开发

转载于:https://blog.51cto.com/12916096/1925453

微服务拆分之AKF原则

AKF是指可拓展模型&#xff0c;有3个坐标轴&#xff0c;分别是x&#xff0c;y&#xff0c;z 为了更好的诠释AKF原则&#xff0c;下面假定有一个系统 基于x轴拓展&#xff1a; 这种方式只能拓展无状态服务&#xff0c;是通过复制系统应用到其他服务器上&#xff0c;再通过给集群…

拆分系统拆分盘盛出不穷,互助系统的延续走出新的路子,农场果园直销系统返利系统开始火了!

在互联网时代&#xff0c;互助盘已经开始落伍了&#xff0c;时代是在进步&#xff0c;现在出现了新的营销模式拆分盘系统模式。 而且非常受大家欢迎&#xff0c;那么什么是拆分盘系统呢&#xff1f; 打个比方&#xff0c;如果发行100分财富&#xff0c;你购买其中的一份财富。 …

分布式架构之系统拆分

系统拆分是单体程序向分布式系统演变的关键一步&#xff0c;也是很重要的一步&#xff0c;拆分的好坏直接关系到未来系统的扩展性、可维护性和可伸缩性等&#xff0c;拆分工作不难理解&#xff0c;但是如何正确拆分、有什么样的方法和原则能帮助我们拆分得到一个我们理想中的系…

水平拆分

水平拆分 概述水平分库示例水平拆分的优点水平拆分的缺点分片原则 概述 水平拆分指的是通过某种策略将数据分片存储&#xff0c;包含库内分表和分库两种&#xff0c;每片数据会分散到不同的MySQL表或库&#xff0c;达到分布式的效果&#xff0c;能够支持非常大的数据量。前面的…

微服务拆分策略

拆分策略可以按功能和非功能维度进行考虑&#xff0c;功能维度主要是划分清楚业务的边界&#xff0c;非功能维度主要考虑六点包括扩展性、复用性、高性能、高可用、安全性、异构性。接下来详细介绍下。 1、功能维度 功能维度主要是划分清楚业务边界&#xff0c;采用的主要设计…

微服务拆分

如何定义一个微服务架构&#xff1f;通常情况下&#xff0c;定义应用程序架构分三步。但是&#xff0c;世界上并没有一个机械化的流程可以遵守&#xff0c;然后指望这个流程输出一个合理的架构。这里只能介绍一个笼统的方法&#xff0c;现实世界中&#xff0c;这是一个不断迭代…

每日一题:为什么要进行系统拆分?

原文来自 GitHub 开源社区 Doocs&#xff0c;欢迎 Star 此项目&#xff0c;如果你有独到的见解&#xff0c;同样可以参与贡献此项目。 面试题 为什么要进行系统拆分&#xff1f;如何进行系统拆分&#xff1f;拆分后不用 dubbo 可以吗&#xff1f; 面试官心理分析 从这个问题开始…

个人对系统拆分的理解

在本人现在的公司和本人工作过的上一家公司&#xff0c;本人有幸参与并实施了公司业务系统的架构拆分&#xff0c;现将之前的工作总结下。 1&#xff0c;为什么要进行系统拆分 首先我们需要想想&#xff0c;到底什么样的系统需要进行拆分&#xff1f;并不是所有的系统都需要进…

登录+注册界面的实现(代码)

先看效果图&#xff01; 话不多说&#xff0c;直接上代码&#xff01; //布局文件&#xff1a;activity_login.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android&qu…

简单WEB登录页面代码实现

longin.html&#xff1a;登录页面&#xff0c;此处action引用**/**类型的地址&#xff0c;JSP可以用${ pageContext.request.contextPath }/LS <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&qu…

编写简单的登陆页面

1.简单登录界面&#xff08;自己设置css样式&#xff09; 代码如下 <form id"loginForm" action"#" method"post" novalidate"novalidate"><div class"login_box"><div class"login_box_left"&g…

实现网页登录代码

python 一、前言 本文通过selenium工具实现工作所用网站的自动登录&#xff0c;下图为网站登录界面。 1、运行环境 操作系统&#xff1a;Windows10 python版本&#xff1a;python3.7 2、需要的python第三方库 1、selenium 安装&#xff1a; pip install selenium selen…