前端与算法 leetcode 8. 字符串转换整数 (atoi)
前端与算法 leetcode 8. 字符串转换整数 (atoi)
题目描述
请你来实现一个 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) 。
概要
手搓一个api
提示
循环
解析
解法一:正则
字符串去除空格然后正则匹配以-+开头数字结束的部分
解法二:api
直接parseint,判断一下即可
解法二:手搓一个api
这个办法通用性要高很多清除空格然后判断首位是否是数字,先实现js版本击败80%,随后在java上实现2ms,击败99%
算法
java解法
class Solution {
public int myAtoi(String str) {
if(str.isEmpty()) return 0 ;
char[] req = str.toCharArray();
long res = 0;
int i=0,s=1,n=str.length();
while(i<n&&req[i]==' '){i++;}
if(i<n && req[i]=='+'){i++;}
else if(i<n&&req[i]=='-'){i++;s=-1;}
while(i<n&&(req[i]>='0'&&req[i]<='9')){
if(res!=(int)res){
return (s==1)?Integer.MAX_VALUE:Integer.MIN_VALUE;
}
res=res*10+req[i++]-'0';
}
if(res!=(int)res){
return (s==1)?Integer.MAX_VALUE:Integer.MIN_VALUE;
}
return (int)(res*s);
}
}
js解法
/**
* @param {string} str
* @return {number}
*/
var myAtoi = function (str) {
const result = str.trim().match(/^(-|\+)?\d+/g);
return result? Math.max(Math.min(Number(result[0]), 2 ** 31 - 1), -(2 ** 31)): 0;
// 一行代码解决问题
// return parseInt(str, 10) < -(2 ** 31) ? -(2 ** 31) : (parseInt(str, 10) > (2 ** 31) - 1 ? (2 ** 31) - 1 : ((parseInt(str, 10) >= -(2 ** 31) && parseInt(str, 10) <= (2 ** 31) - 1) ? parseInt(str, 10) : 0));
// 正经点的api侠解答
// let result = parseInt(str, 10);
// let max = 2 ** 31;
// if (Number.isNaN(result)) {
// return 0;
// } else if (result < 0 - max) {
// return 0 - max;
// } else if (result > max - 1) {
// return max - 1;
// } else {
// return result;
// }
// 不调api的解法
// str = str.trim(); // 清除空格
// let max = 2 ** 31;
// // 如果不是数字
// if (!(str.charCodeAt(0) >= 48 && str.charCodeAt(0) <= 57)) {
// if (str.charAt(0) === '+') {
// let req = res(str, 1);
// return req >= (max - 1) ? max - 1 : req;
// }
// if (str.charAt(0) === '-') {
// let req = -(res(str, 1));
// return req <= -max ? -max : req;
// }
// } else {
// // 第一位就是数字的情况
// let req = res(str, 0);
// return req >= (max - 1) ? max - 1 : req;
// }
// return 0;
// };
// // 解析数字,第一个参数字符串,第二个起始位置
// const res = (s, num) => {
// let r = 0;
// for (let i = num; i < s.length; i++) {
// // 只接受数字
// if (s.charCodeAt(i) <= 57 && s.charCodeAt(i) >= 48) {
// r = r * 10 + (s.charCodeAt(i) - 48);
// } else {
// break;
// }
// }
// // 最大值和最小值之间有差距,在这里判断不如结束后判断
// return r;
};
传入测试用例的运行结果
input:
output:
执行结果
执行用时 :80 ms, 在所有 javascript 提交中击败了94.84%的用户
内存消耗 :35.5 MB, 在所有 javascript 提交中击败了74.01%的用户
GitHub仓库
查看更多
前端与算法 leetcode 8. 字符串转换整数 (atoi)的更多相关文章
- LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))
8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...
- [LeetCode] 8. 字符串转换整数 (atoi)
题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- 每日一题LeetCode 8. 字符串转换整数 (atoi)
问题描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将 ...
- LeetCode 8.字符串转换整数 (atoi)(Python3)
题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...
- 前端与算法 leetcode 387. 字符串中的第一个唯一字符
目录 # 前端与算法 leetcode 387. 字符串中的第一个唯一字符 题目描述 概要 提示 解析 解法一:双循环 解法二:Set法单循环 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...
- Java实现 LeetCode 8 字符串转换整数(atoi)
8. 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
- LeetCode Golang 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...
- 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)
字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...
- 17、字符串转换整数 (atoi)
17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
随机推荐
- Ubuntu 16.04 集成安装Apache+PHP+Kerberos+LDAP+phpLDAPadmin
一.安装Apache 1.1.安装Apache apt-get update apt-get install apache2 过程如下: root@duke01:~# apt-get update命中 ...
- 为什么重写equals必须重写hoshCode的基础分析
为什么重写equals必须重写hoshCode的基础分析 1.我们先来了解下原生的equals和hashCode代码 原生equals:它判断的是两个对象是否相等 原生hashCode值:它是根据内存 ...
- spark版本定制课程-第1课
spark版本定制课程-第1课 1.学习本课程可以自己动手改进spark,或者给spark增加功能.增加某些官方没有提供的功能,通过本课程希望早就一些顶级spark专家,根据整个社会的需要对spark ...
- 基于SignalR的服务端和客户端通讯处理
SignalR是一个.NET Core/.NET Framework的实时通讯的框架,一般应用在ASP.NET上,当然也可以应用在Winform上实现服务端和客户端的消息通讯,本篇随笔主要基于Sign ...
- 利用电脑开启自带虚拟wifi,无需第三方工具。
注:此方法只验证win 7以上系统,XP server 2016 系统未验证 1.新建记事本,在记事本中输入netsh wlan set hostednetwork mode=allow ssid= ...
- CocosCreator中_worldMatrix到底是什么(下)
Cocos Creator 中 _worldMatrix 到底是什么(下) 1. 摘要 上篇介绍了矩阵的基本知识以及对应图形变换矩阵推倒.中篇具体介介绍了对应矩阵转换成cocos creator代码的 ...
- 从零开始把项目发布到maven仓库中心
sonatype准备操作 注册账号 https://issues.sonatype.org 1. 密码符号规范,并且工记住 新建项目 1. group id 如果你有com域名的所有权可以直接使用,如 ...
- 解决js计算0.1+0.2 !==0.3
经常做用js数据运算的同学应该了解,在js中,0.1+0.2不会等于0.3,而是等于: 我一开始发现这个bug的时候也觉得很奇怪,那怎么去解决这个bug,让0.1+0.2 最后能得到0.3呢? 方法一 ...
- 在react项目中使用redux or mobx?
主要比较参数: 库体积,打包项目体积 开发体验 性能对比 在对比参数前首先分析一下redux和mobx的设计模式,redux和mobx都没有使用传统的mvc/mvvm形式,而且他们使用flux结构也略 ...
- 基准测试了 ArrayList 和 LinkedList ,发现我们一直用 ArrayList 也是没什么问题的
ArrayList 应该是 Java 中最常用的集合类型了,以至于我们说到集合就会自然而然的想到 ArrayList.很多同学都没有用过除了 ArrayList 之外的其他集合,甚至于都已经忘了除了 ...