前端与算法 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) 。

8. 字符串转换整数 (atoi)

概要

手搓一个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仓库

查看github仓库 觉的骚也可以给个星星

查看更多

查看更多题解

前端与算法 leetcode 8. 字符串转换整数 (atoi)的更多相关文章

  1. LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))

    8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...

  2. [LeetCode] 8. 字符串转换整数 (atoi)

    题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  3. 每日一题LeetCode 8. 字符串转换整数 (atoi)

    问题描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将 ...

  4. LeetCode 8.字符串转换整数 (atoi)(Python3)

    题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...

  5. 前端与算法 leetcode 387. 字符串中的第一个唯一字符

    目录 # 前端与算法 leetcode 387. 字符串中的第一个唯一字符 题目描述 概要 提示 解析 解法一:双循环 解法二:Set法单循环 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...

  6. Java实现 LeetCode 8 字符串转换整数(atoi)

    8. 字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...

  7. LeetCode Golang 8. 字符串转换整数 (atoi)

    8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...

  8. 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)

    字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...

  9. 17、字符串转换整数 (atoi)

    17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...

随机推荐

  1. [LUOGU1272] 重建道路 - 树形背包

    题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的.因此,牧场运输系 ...

  2. 套壳浏览器与Chrome浏览器之间的差别

    之前QQ浏览器一直是我前端调试工具的主力,因为它是一个套壳浏览器,所以它的兼容模式(谷歌Chrome内核)和极速模式(IE浏览器内核)简直是调试兼容性的神器,可以直接切换,不用再反复打开Chrome和 ...

  3. 【RabbitMQ 实战指南】一 过期时间TTL

    RabbitMQ 可以对消息和队列设置过期时间(TTL) 1.设置消息的TTL 目前有两种方式可以设置消息的TTL 第一种方式是通过队列属性设置,队列中所有消息都有相同的过期时间 第二种方式是对消息本 ...

  4. mysql 堆注入写shell

    如果一个平台有注入点的时候可以通过写一句话拿shell 条件 1.myql 5.6.34 版本区分 2.有写的权限 3.知道绝对路径 MySQL 中 在在mysql 5.6.34版本以后 secure ...

  5. cookie session token 详解

    cookie 是保存在本地终端的数据.cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器. 可以在浏 ...

  6. ElasticSearch业务逻辑案例

    ElasticSearch业务逻辑案例 一.业务难题 我们有一个索引: myindex/mytype(为了方便,我们下文以a/b表示) 索引类型中的一个字段group之前是a.b.c(历史遗留问题), ...

  7. 9i oracle数据库迁移到11G(exp)

    这个是之前生产上打算迁移的文档,后面离职了没有在停机迁移,但是测试过几次没有问题,其中需要把9I的110,120库迁移到11g一个数据库中,但是110,120库之间有相同的表名字,以及有DBLINK. ...

  8. CheckBox多选

    前台: <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> & ...

  9. Spring(三)面向切面编程(AOP)

    在直系学长曾经的指导下,参考了直系学长的博客(https://www.cnblogs.com/WellHold/p/6655769.html)学习Spring的另一个核心概念--面向切片编程,即AOP ...

  10. 配置IIS服务器提供APP文件下载

    [IIS7.IIS7.5] 1)打开IIS服务管理器,左边点到计算机(也可设置特定网站) 2)右边功能项中找到MIME类型,双击打开3)右键“添加”4)扩展名中填写".apk",M ...