当前位置: 首页 > news >正文

LeetCode8-字符串转换整数(atoi)

目录

  • 1.大神解法
  • 2.我的辣鸡解法:
  • 3.整数相加的溢出判断(chaGPT代码)
  • 4.整数相乘溢出判断(chatGPT代码)

到目前为止比较简单容易理解的一个代码:
参考链接:
🔗:【8. 字符串转换整数 String to Integer (atoi) 【LeetCode 力扣官方题解】-哔哩哔哩】

1.大神解法

累乘和累加,不需要调用pow函数,比我的垃圾解法快得多!判断整数溢出的点比从后往前算要少!
判断整数溢出的逻辑是:
1.如果ans比MAX_value的10分之1大,则乘以10累加之后绝对溢出.
2.如果我恰好等于max_value的10分之1,则需要计算max_value的个位数,如果在当前ans的最后一位数的前提下,ans的大小恰好等于max_value的 10分之1,并且最后以为大于等于max_value的个位数,则ans乘以10累加max_value个位数之后一腚溢出!这是精准的判断!

class Solution {public int myAtoi(String s) {boolean negative=false;char[] ch=s.toCharArray();int i=0,ans=0,n=ch.length;if(s==null||n==0){return 0;}while(i<n&&(ch[i]==' ')){++i;}if(i==n){return 0;}if (ch[i]=='-') {negative=true;}if (ch[i]=='+'||ch[i]=='-') {i++;}while (i < ch.length && ch[i] <= '9' && ch[i] >= '0') {int r = ch[i] - '0';if (ans>Integer.MAX_VALUE/10||(ans==Integer.MAX_VALUE/10&&r>Integer.MAX_VALUE%10)) {return !negative?Integer.MAX_VALUE:Integer.MIN_VALUE;}ans=ans*10+r;++i;}return !negative?ans:-ans;}}

2.我的辣鸡解法:

公式是:
ans = ans + digit*Math.pow
从后往前算,累加,比较费劲,不如大神解法来的直接!大神解法维护的变量少,而且速度更快!而且我的这个算法有两个整数溢出的点,需要判断整数溢出的语句更多更复杂!

class Solution {public int myAtoi(String s) {if(s==null||s.length()==0){return 0;}boolean hashNum=false,negative=false;char[] ch=s.toCharArray();int i=0,ans=0,n=ch.length;while(i<n&&(ch[i]==' ')){++i;}int tmp_idx=i;while(i<n&&!(ch[i]>='1'&&ch[i]<='9')&&(ch[i]!='-'&&ch[i]!='+')){++i;}if(i<n&&(ch[i]=='-'||ch[i]=='+')){negative= ch[i]=='+'?false:true;i=tmp_idx+1;}else{//没有+的情况negative=false;i=tmp_idx;}while(i<n&&ch[i]=='0'){++i;}while(i<n){if((ch[i]<='9'&&ch[i]>='1')){break;}else{return 0;}}int j=i;while(j<n){if((ch[j]<='9'&&ch[j]>='0')){++j;}else{--j;break;}}if(j>=n||(!(ch[j]<='9'&&ch[j]>='0'))){--j;}int itg=j-i;//假如是3位数,则itg=2,10位数,itg=9if(itg>10){return !negative?Integer.MAX_VALUE:Integer.MIN_VALUE;}int index=0;//10^(index)次方while(index<=itg){if(((ch[j]-'0')>=3&&index>=9)||((ch[j]-'0')>=2&&index>=10)){return !negative?Integer.MAX_VALUE:Integer.MIN_VALUE;}int rhs=((ch[j]-'0')*(int)Math.pow(10,index));if(ans>Integer.MAX_VALUE-rhs){return !negative?Integer.MAX_VALUE:Integer.MIN_VALUE;}else {ans+=rhs;}++index;--j;if(j-i>=itg){break;}}return !negative?ans:-ans;}}

3.整数相加的溢出判断(chaGPT代码)

public class OverflowExample {public static void main(String[] args) {int a = 2147483647;  // 最大的int值int b = 1;if (willAdditionOverflow(a, b)) {System.out.println("Overflow detected!");} else {int result = a + b;System.out.println("Result: " + result);}}private static boolean willAdditionOverflow(int a, int b) {// 如果 a 和 b 同号,且它们的和与 a 的符号不同,即溢出if (b > 0 && a > Integer.MAX_VALUE - b) {return true;}if (b < 0 && a < Integer.MIN_VALUE - b) {return true;}return false;}
}

4.整数相乘溢出判断(chatGPT代码)

对于整数相乘,溢出的判断逻辑相对复杂一些,因为整数相乘可能会导致更大范围的结果。以下是一个通用的整数相乘的溢出判断逻辑的代码:

public class OverflowExample {public static void main(String[] args) {int a = 2147483647;  // 最大的int值int b = 2;if (willMultiplicationOverflow(a, b)) {System.out.println("Overflow detected!");} else {int result = a * b;System.out.println("Result: " + result);}}private static boolean willMultiplicationOverflow(int a, int b) {// 特殊处理乘法溢出的边界情况if (a == 0 || b == 0) {return false;}// 如果 a 为正,且 b 大于 Integer.MAX_VALUE / a,或者 a 为负,且 b 小于 Integer.MIN_VALUE / a,即溢出if ((a > 0 && b > Integer.MAX_VALUE / a) || (a < 0 && b < Integer.MIN_VALUE / a)) {return true;}return false;}
}

在这个代码中,willMultiplicationOverflow 方法首先处理了特殊情况,即其中一个因子为0。然后,它检查是否会发生溢出,主要是通过判断 a 的正负以及 b 是否足够大或足够小。这是因为 Integer.MAX_VALUE 和 Integer.MIN_VALUE 在绝对值上是相差1的,而在相乘时,结果的范围是 [Integer.MIN_VALUE, Integer.MAX_VALUE],因此需要额外的条件判断。

请注意,在实际编程中,可能需要更复杂的判断逻辑,尤其是在处理更大范围的整数时。此外,如果需要处理更大的整数,可能需要考虑使用 long 类型,因为它的范围更广。

相关文章:

LeetCode8-字符串转换整数(atoi)

目录 1.大神解法2.我的辣鸡解法:3.整数相加的溢出判断(chaGPT代码)4.整数相乘溢出判断(chatGPT代码) 到目前为止比较简单容易理解的一个代码: 参考链接: &#x1f517;:【8. 字符串转换整数 String to Integer (atoi) 【LeetCode 力扣官方题解】-哔哩哔哩】 1.大神解法 累乘和…...

算法分析与设计课后练习22

设W(5,7,10,12,15,18,20)和M35&#xff0c;使用过程SUMOFSUB找出W种使得和数等于M的全部子集并画出所生成的部分状态空间树...

芯片IO口不加电阻会怎样?

芯片IO口不加电阻会怎样&#xff1f; 可能会导致以下几个后果&#xff1a; 1.高电流问题&#xff0c;IO口没有电阻限流&#xff0c;当与外部设备直接连接时&#xff0c;就可能会导致过大的电流流过IO口&#xff0c;这就可能损坏IO口&#xff0c;引起短路或烧坏其它电路组件。像…...

智慧化工园区信息化整体解决方案:PPT全53页,附下载

关键词&#xff1a;智慧化工园区建设方案&#xff0c;智慧化工园区建设规范&#xff0c;智慧化工园区建设指南 一、售智慧化工园区建设背景 随着工业化、信息化和数字化进程的加速&#xff0c;化工园区面临着越来越多的挑战&#xff0c;如安全生产、环境保护、能源消耗等问题…...

深度学习之三(卷积神经网络--Convolutional Neural Networks,CNNs)

概念 卷积神经网络(Convolutional Neural Networks,CNNs)是一种特殊的神经网络结构,专门用于处理具有网格状结构(如图像、音频)的数据。CNN 在计算机视觉领域取得了巨大成功,广泛应用于图像识别、物体检测、图像生成等任务。以下是 CNN 的主要理论概念: 在数学中,卷…...

竞赛选题 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 行人车辆目标检测计数系统 …...

【链表的说明、方法---顺序表与链表的区别】

文章目录 前言什么是链表链表的结构带头和不带头的区别 链表的实现&#xff08;方法&#xff09;遍历链表头插法尾插法任意位置插入一个节点链表中是否包含某个数字删除链表某个节点删除链表中所有关键字key清空链表所有节点 ArrayList 和 LinkedList的区别总结 前言 什么是链…...

彻底解决electron-builder安装问题与npm下载配置问题

electron-builder这个工具每次安装最少要耗费我整整一天的时间。由于只需安装一次即可使用就没去做好笔记,但有时候涉及到更新,或者换了新电脑,这个环境还得重新安装。为了避免下次安装浪费一整天时间,特此做好笔记。 虽然网上找了很多资料但都不详细,现在我们从底层来理解…...

变量命名的规则与规范

变量命名的规则与规范 变量命名的规则不能使用关键字字母须区分大小写由字母、数字、_、$组成&#xff0c;且不能以数字开头 变量命名的规范起名须有一定的意义遵守小驼峰命名法 变量命名的规则 不能使用关键字 在JavaScript中声明变量不能使用JavaScript的常用关键字&#x…...

【开源】基于Vue和SpringBoot的服装店库存管理系统

项目编号&#xff1a; S 052 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S052&#xff0c;文末获取源码。} 项目编号&#xff1a;S052&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服…...

怎样用css画一个圆?

要使用 CSS 画一个圆&#xff0c;可以使用 border-radius 属性为一个元素添加圆角&#xff0c;将 width 和 height 设置为相等的值&#xff0c;从而形成一个圆形。 以下是一个使用 CSS 画圆的简单示例&#xff1a; .circle {width: 100px;height: 100px;background-color: #3…...

Minikube Mac安装使用

minikube start | minikube 安装minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 sudo install minikube-darwin-amd64 /usr/local/bin/minikube 1 2 启动本地集群 minikube start --driverdocker # 等待几分钟 让docker 拉…...

人工智能-循环神经网络通过时间反向传播

到目前为止&#xff0c;我们已经反复提到像梯度爆炸或梯度消失&#xff0c; 以及需要对循环神经网络分离梯度。 例如&#xff0c;我们在序列上调用了detach函数。 为了能够快速构建模型并了解其工作原理&#xff0c; 上面所说的这些概念都没有得到充分的解释。 本节将更深入地探…...

Delphi 取消与设置CDS本地排序

取消与设置CDS本地排序 取消CDS本地排序. cds.IndexDefs.Update; if cds.IndexName<> then begin if cds.IndexDefs.IndexOf(index1)>0 then cds.DeleteIndex(index1); cds.IndexDefs.Clear; cds.IndexName:; end; 设置CDS本地排序 c…...

智能门禁刷脸照片格式gif、bmp,png转换,转换base64

随着刷脸闸机的普及&#xff0c;很多场所都使用了刷脸金闸机&#xff0c;很多时候对方传来的照片格式不对。 刷脸闸机对应的格式都是jpg 照片来源&#xff1a;访客手机上传&#xff0c;管理员上传&#xff0c;团队购票上传 在转换的语言很多&#xff0c;在网站中php使用较为…...

听GPT 讲Rust源代码--src/librustdoc

题图来自 Why is building a UI in Rust so hard? File: rust/src/librustdoc/core.rs 在Rust中&#xff0c;rust/src/librustdoc/core.rs文件的作用是实现了Rustdoc库的核心功能和数据结构。Rustdoc是一个用于生成Rust文档的工具&#xff0c;它分析Rust源代码&#xff0c;并生…...

hosts 配置本地映射不生效

关闭所有科学上网工具&#xff01;&#xff01;刷新 DNS 解析缓存&#xff1a;ipconfig /flushdns关闭所有浏览器访问映射地址时&#xff0c;带上端口号...

Linux难学?大神告诉你,Linux到底该怎么自学!

文章目录 Part.1Part.2Part.3写作末尾 知乎上有一条热门问答&#xff0c;问题是“Linux为什么那么难&#xff1f;” 从问题来看&#xff0c;提问者还处在初学阶段。但他显然受困于 Linux 环境基本操作的问题&#xff0c;对操作系统本身的原理还不熟悉&#xff0c;并且对命令行工…...

GAMES101—Lec 05~06:光栅化

目录 概念回顾&#xff08;个人理解&#xff09;光栅化1.采样2.采样出现的问题&#xff1a;走样 反走样 概念回顾&#xff08;个人理解&#xff09; 屏幕&#xff1a;在图形学中&#xff0c;我们认为屏幕是一个二维数组&#xff0c;数组里的每一个元素为一个二维像素。 光栅化…...

R语言——taxize(第三部分)

taxize&#xff08;第三部分&#xff09; 3. taxize 文档中译3.24. genbank2uid&#xff08;从 GenBankID 获取 NCBI 分类 UID&#xff09;3.25. getkey&#xff08;获取 API 密钥的函数&#xff09;3.26. get_boldid&#xff08;获取搜索词的 BOLD&#xff08;生命条形码&…...

深度解析NHSE:揭秘《动物森友会》存档编辑器的核心技术架构

深度解析NHSE&#xff1a;揭秘《动物森友会》存档编辑器的核心技术架构 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE&#xff08;Animal Crossing: New Horizons Save Editor&#xff09;是…...

Godot 4与Blender无缝资产导入:Importality插件原理与实战

1. 项目概述&#xff1a;当Godot 4遇上Blender&#xff0c;一场资产导入的革命如果你是一名独立游戏开发者&#xff0c;或者是一个小型游戏工作室的成员&#xff0c;那么你大概率对这两个名字不陌生&#xff1a;Godot和Blender。前者是一个功能强大、开源免费的游戏引擎&#x…...

对比直接使用厂商API体验Taotoken在连接稳定性上的差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用厂商API体验Taotoken在连接稳定性上的差异 在开发与测试依赖大模型能力的应用时&#xff0c;服务的连接稳定性是影响效…...

告别VMWare!用VirtualBox 7.0.6给CentOS 7.6装个桌面,保姆级避坑指南

告别VMWare&#xff01;用VirtualBox 7.0.6打造高效CentOS 7.6桌面环境全攻略 在开源工具日益成熟的今天&#xff0c;VirtualBox作为一款轻量级、跨平台的虚拟机解决方案&#xff0c;已经成为开发者搭建测试环境的首选。特别是对于需要频繁创建、销毁实验环境的Linux学习者而言…...

大模型---SSE与WebSocket

目录 一.SSE 二.WebSocket 三.SSE与WebSocket的区别 一.SSE SSE(Server-Sent Events),它允许服务器通过一个长时间保持打开的 HTTP 响应,持续向浏览器发送事件。浏览器端通过 EventSource API 建立连接,服务器端返回的响应类型是text/event-stream。SSE 是服务器到客户…...

OpenClaw任务控制中心:构建自动化工作流的轻量级调度平台

1. 项目概述与核心价值最近在折腾一些自动化任务时&#xff0c;发现很多开源工具虽然功能强大&#xff0c;但往往需要自己写胶水代码来串联&#xff0c;或者需要一个统一的界面来管理和监控。这让我想起了以前在运维和开发中经常遇到的痛点&#xff1a;脚本分散、日志难查、状态…...

从场景化需求到技术参数:构建个人音频工具包的实战指南

1. 耳机选购的底层逻辑&#xff1a;从“听个响”到“场景化工具”我家里有个抽屉&#xff0c;专门用来放耳机&#xff0c;数了数&#xff0c;不下十副。从最早有线、笨重的头戴式&#xff0c;到如今小巧到几乎隐形的真无线&#xff0c;每一副都对应着我生活中某个特定的片段。这…...

RubricHub:自动化评估标准生成技术解析与应用

1. 项目背景与核心价值在教育评估和技能考核领域&#xff0c;评估标准&#xff08;Rubric&#xff09;的制定一直是项耗时费力的工作。传统方式需要领域专家手动设计评分维度和等级描述&#xff0c;这个过程往往需要数周甚至数月时间。RubricHub项目的出现&#xff0c;正是为了…...

毕业设计 深度学习口罩佩戴检测系统

简介 2020新冠爆发以来&#xff0c;疫情牵动着全国人民的心&#xff0c;一线医护工作者在最前线抗击疫情的同时&#xff0c;我们也可以看到很多科技行业和人工智能领域的从业者&#xff0c;也在贡献着他们的力量。近些天来&#xff0c;旷视、商汤、海康、百度都多家科技公司研…...

AUTOSAR: RTE概述

类比&#xff1a;RTE就类似于电话接线员&#xff08;向他人打电话先将电话信息传给接线员&#xff0c;再由接线员传给被接受人&#xff09;。RTE管理SWC与SWC之间、SWC与BSW之间的通信信息。比如&#xff0c;SWC1要将信息传给SWC2&#xff0c;可SWC2正在执行任务&#xff0c;RT…...