将整数字符串转成整数值

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

题目:

给定一个字符串 str,如果str符合日常书写的整数形式,并且属于 32 位整数的范围,返回 str 所代表的整数值,否则返回 0 。

举例:

str = "123"  返回 123

str = "023"  返回 23

str = "2147483647" 返回 2147483647

str = "2147483648" 返回0,因为溢出了

str = "-123"  返回 -123

思路:

检查是否合法:

    public static boolean isValid(char[] chas) {//排除不以符号和数字开头的if (chas[0] != '-' && (chas[0] < '0' || chas[0] > '9')) {return false;}//排除 ‘-’ 和 ‘-023’ 这种的if (chas[0] == '-' && (chas.length == 1 || chas[1] == '0')) {return false;}//排除以0开头的if (chas[0] == '0' && chas.length > 1) {return false;}//检查字符串其他位置是不是都是数字 如果有不是的返回 falsefor (int i = 1; i < chas.length; i++ ) {if (chas[i] < '0' || chas[i] > '9') {return false;}}return true;}

如果str不符合日常书写的整数形式,根据题目要求,直接返回0即可。

如果符合,进行如下转换过程:

不管是正数还是负数,转换过程都以 负数的形式出现,然后根据前面的 '-' ,如果有负号,结果保持不变,如果没有'-',去掉结果前面的负号。

例如:

str = "123"  转换为结果时 -123,posi= true,最后返回 123

str = "-123"  转换为结果时 -123,posi= false,最后返回 -123

判断溢出问题:

    public static int convert(String str) {if (str == null || str.equals("")) {return 0;}char[] chas = str.toCharArray();if (!isValid(chas)) {return 0;}boolean posi = chas[0] == '-' ? false : true;int minq = Integer.MIN_VALUE / 10;int minr = Integer.MAX_VALUE % 10;int res = 0;int cur = 0;//如果是以 ‘-’ 开头,就从 1 位置遍历,如果不是,就从0位置开始遍历for (int i = posi ? 0 : 1; i < chas.length; i++) {//拿到当前字符的负数形式cur = '0' - chas[i];//判断是否溢出if ((res < minq) || (res == minq && cur < minr)) {return 0;}res = res * 10 + cur;}if(posi && res == Integer.MIN_VALUE) {return 0;}return posi ? -res : res;}


http://chatgpt.dhexx.cn/article/1mdP2cvL.shtml

相关文章

MySQL 将 字符串 转为 整数

1、CAST(epr AS type) 1&#xff09;type 为 SIGNED SELECT CAST("-12" AS SIGNED); 效果如下&#xff1a; 2&#xff09;type 为 UNSIGNED SELECT CAST("-12" AS UNSIGNED); 效果如下&#xff1a; 2、CONVERT(expr,type) SELECT CONVERT(123, SIGNE…

把字符串转换成整数

文章目录 1. 题目描述2. 解题思路3. 代码实现 1. 题目描述 题目链接&#xff1a;把字符串转换成整数 2. 解题思路 用一个 index 全程记录字符串下标。按照题目要求的点&#xff0c;先排除前导空格&#xff0c;再检查符号&#xff0c;最后转换数字&#xff0c;遇到非数字即停止…

字符串整数之间的转换

在数字和字符之间转换 一、整数转字符 1.在后面加’0‘即可&#xff0c;如&#xff1a;‘1’‘0’ 这样做可行是因为字符0到字符9在ascii编码时是连续的&#xff0c;字符0的ascii值是48&#xff0c;字符1的ascii值是49&#xff0c;其他数字字符依次往后排&#xff0c;而ascii值…

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

题目要求&#xff1a; 分析&#xff1a; 把一个一个字符以整数的形式来进行输出&#xff0c;需要考虑相互转化的问题不能使用库函数&#xff01;&#xff01;&#xff01;首尾会有空格&#xff08;进行去空格操作&#xff0c;可以减少不必要的判断&#xff09;区分正负正数结果…

高并发系统架构设计之微服务篇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;并不是所有的系统都需要进…