描述

请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
提示:
本题中的空白字符只包括空格字符 ’ ’ 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
输入: “42”
输出: 42
示例 2:
输入: " -42"
输出: -42
解释: 第一个非空白字符为 ‘-’, 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
示例 3:
输入: “4193 with words”
输出: 4193
解释: 转换截止于数字 ‘3’ ,因为它的下一个字符不为数字。
示例 4:
输入: “words and 987”
输出: 0
解释: 第一个非空字符是 ‘w’, 但它不是数字或正、负号。
因此无法执行有效的转换。
示例 5:
输入: “-91283472332”
输出: -2147483648
解释: 数字 “-91283472332” 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。

题解

class Solution {public int myAtoi(String str) {char[] arr = str.toCharArray();int len = arr.length;int i = 0;while(i < len && arr[i] == ' '){i++;}if(i == len) return 0;int flag = 0;if(arr[i] == '-'){flag = -1;i++;} else if(arr[i] == '+'){i++;} else if(!Character.isDigit(arr[i])){return 0;}int ans = 0;while(i < len && Character.isDigit(arr[i])){int digit = arr[i] - '0';// 如果不越界 ans = ans * 10 + digit // 要求 ans < Integer.MAX_VALUEif(ans > (Integer.MAX_VALUE - digit) / 10){return flag == -1? Integer.MIN_VALUE: Integer.MAX_VALUE;}ans = ans * 10 + digit;i++;}return flag == -1? -ans: ans;}
}

【LeetCode】4月3日打卡-Day19-字符串转整数相关推荐

  1. leetcode.cn 2022年11月4日 打卡题 754. 到达终点数字【一元二次方程解法,时间复杂度O(1)】

    leetcode 2022年11月4日 打卡题 754. 到达终点数字 写在前面   首先感谢 @子不语 大佬发布的一元二次方程代码实现的启发.题解链接:子不语-754. 到达终点数字   本文侧重梳 ...

  2. 2020年6月23日打卡

    打卡 2020年6月23日 计划与安排 Leetcode 67. 二进制求和 学习笔记 这位先生我能占用您一点时间吗-- 计划与安排 预期每天在博客中叙述如下内容: 每日做leetcode的感悟与题解 ...

  3. 3月19日 打卡

    一周第一次课(3月19日) 1.1 学习之初 1.2 约定 1.3 认识Linux 1.4 安装虚拟机 1.5 安装centos7 学习Liux 真的只是一场缘分,之前我只知道她是一个操作系统.但我重 ...

  4. 【LeetCode】3月17日打卡-Day2

    题1 拼写单词 描述 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串 ...

  5. 【LeetCode】4月5日打卡-Day21-最大子序和问题

    描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续 ...

  6. 【LeetCode】4月4日打卡-Day20-接雨水

    描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下, ...

  7. 【LeetCode】4月1日打卡-Day17-括号匹配/嵌套深度

    题1 有效括号的嵌套深度 题解 要求划分出使得最大嵌套深度最小的分组,我们首先得知道如何计算嵌套深度.我们可以通过栈实现括号匹配来计算: 维护一个栈 s,从左至右遍历括号字符串中的每一个字符: 如果当 ...

  8. 【LeetCode】4月2日打卡-Day18-矩阵操作

    题1 生命游戏 描述 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每 ...

  9. 【LeetCode】3月31日打卡-Day16-数组排序算法汇总

    排序算法一览 快排 插入排序 希尔排序 桶排序 计数排序 归并排序 桶排序 class Solution {public int[] sortArray(int[] nums) {if(nums.le ...

最新文章

  1. RHEL7OSP-6.0的openstack云主机发放
  2. Linux多线程同步的几种方式
  3. spark集群运行模式理解
  4. VMware 虚拟机(linux)增加根目录磁盘空间
  5. 如何:在Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中测试依赖项
  6. word模板生成word报表文档
  7. 如果风 知道 ... 如果云 知道 ...
  8. 山东省计算机春季高考大纲,2017年山东春季高考专业知识考试大纲.doc
  9. svn在linux下的使用(svn命令)[转]
  10. UE4之Obj模型解构解析
  11. snmpwalk 获取端口流量_通过snmpwalk命令计算接口速率
  12. 恒流源驱动电路 随笔一
  13. 2:jdbc 连接步骤及基本用法
  14. GetShell的姿势总结
  15. 历代iPhone的分辨率
  16. Xftp无法与192.168.xx.xx连接 SSH服务器拒绝了密码。请再试一次。
  17. 碰壁记录(持续更新)
  18. 西门子博途v16系统要求_西门子博途技术研讨
  19. 你的Web3域名,价值究竟何在?
  20. Amber中对体系的距离角度和二面角加以限制

热门文章

  1. 每日一题(25)—— 自加++
  2. nyoj744 蚂蚁的难题(-)
  3. 计算机语言恢复,win10系统找回消失不见语言栏的恢复方法
  4. 论文阅读 - CRNN
  5. LeetCode 1760. 袋子里最少数目的球(二分查找)
  6. LeetCode MySQL 1241. 每个帖子的评论数
  7. LeetCode 1474. 删除链表 M 个节点之后的 N 个节点
  8. LeetCode 609. 在系统中查找重复文件(哈希)
  9. python tkinter选择路径控件_如何使用tkinter在Python中选择目录并存储位置
  10. python中response.text_Sanic response text() 函数用法和示例