算法(附思维导图全部解法)300题之(8)字符串转换整数(atoi)
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(8)字符串转换整数 (atoi)
导读:
我的解法很多 且 很 sao,你忍一下~
一 题目描述
题目描述
题目描述
题目描述
题目描述
二 解法总览(思维导图)
思维导图
三 全部解法1 方案1
1)代码: // 方案1 var myAtoi = function(s) { const l = s.length, numStrArr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; let index = 0, // 正、负 情况 sign = undefined, // 结果字符串 resStr = ""; // 1)不断去掉前面的 空格字符 while (index < l && s[index] === " ") { index++; } // 2)去完前面的空格字符后,后面的第一个字符必须是 "+"、"-" 或 数值字符 // 不是的话直接返回 0 if (index < l) { if (s[index] === "-" || s[index] === "+" ) { sign = s[index]; resStr += sign; } else { if (numStrArr.includes(s[index])) { resStr += s[index]; } else { return 0; } } } // 3)+、- 号确定后,不断往后读取数值字符(若是遇到 非数值字符 就没必要往下读了) 并 不断存入resStr index += 1; while (index < l && numStrArr.includes(s[index])) { resStr += s[index]; index++; } let resValue = parseInt(resStr); // 边界1:"+-12" (核心:只有 +、- 字符等,此时 parseInt(resStr) 为 NaN,即Not A Number) resValue = Number.isNaN(resValue) ? 0 : resValue; // 边界2:范围的上下界处理 resValue = resValue < Math.pow(-2, 31) ? Math.pow(-2, 31) : resValue; resValue = resValue > Math.pow(2, 31) - 1 ? Math.pow(2, 31) - 1 : resValue; // 4)返回最终的结果 return resValue; } 2 方案2
1)代码: // 方案2 方案1的"优化版",其实没必要进行 去前面空格字符 等操作,直接使用 JS自带的 parseInt() var myAtoi = function(str) { // 1)直接使用 parseInt() ,其帮我们少了不少"前置处理工作" let resValue = parseInt(str); // 2)边界处理 // 边界1:"+-12" (核心:只有 +、- 字符等,此时 parseInt(resStr) 为 NaN,即Not A Number) if (isNaN(resValue)) { return 0; } else { // 边界2:范围的上下界处理 resValue = resValue < Math.pow(-2, 31) ? Math.pow(-2, 31) : resValue; resValue = resValue > Math.pow(2, 31) - 1 ? Math.pow(2, 31) - 1 : resValue; } // 3)返回最终的结果 return resValue; }; 3 方案3
1)代码: // 方案3 状态机 var myAtoi = function(str) { // 根据当前 字符char,获取要变更为哪个 状态state const getStateIndex = char => { const numStrArr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; // 初始化流转值为 "end" 状态,其实也可以有别的写法 let resStateIndex = 3; if (char === " ") { resStateIndex = 0; } else if (char === "+" || char === "-") { resStateIndex = 1; } else if (numStrArr.includes(char)){ resStateIndex = 2; } return resStateIndex; }; // 1)初始化各种值等,特别是 tableMap 的定义!! const l = str.length, // 状态机的表格形式 tableMap = { "start": ["start", "signed", "in_number", "end"], "signed": ["end", "end", "in_number", "end"], "in_number": ["end", "end", "in_number", "end"], "end": ["end", "end", "end", "end"], }; // state:当前的状态state值 let state = "start", sign = 1, index = 0, resValue = 0; // 2)不断向后遍历 字符串str ,根据当前遍历到的字符char去不断更新 state、resValue、sign 等值, // 当 index >=l || state === "end" 时,退出遍历 while (index < l) { const char = str[index]; state = tableMap[state][getStateIndex(char)]; if (state == "in_number") { resValue = resValue * 10 + parseInt(char); } else if (state === "signed") { // 因为 sign 初始化为 1,所以为 "-" 时才有必要处理 if (char === "-") { sign = -1; } } index++; // 优化:当前state为"end",就可以退出、不用再遍历 if (state === "end") { break; } } // 3)恢复符号 resValue *= sign; // 4)边界处理 // 边界1:范围的上下界处理 resValue = resValue < Math.pow(-2, 31) ? Math.pow(-2, 31) : resValue; resValue = resValue > Math.pow(2, 31) - 1 ? Math.pow(2, 31) - 1 : resValue; // 5)返回结果 return resValue; }
对不起,短视频不是数字音乐的未来即使没了微博热搜,也丝毫不影响周董新歌mojito击破各个圈层引爆关注。6月12日零点,mojito准时在腾讯音乐娱乐集团旗下的QQ音乐酷狗音乐酷我音乐等上线售卖,一经上线平台便纷
ikbc机械键盘狐樱,粉色键盘红轴加持,爱了在笔记本盛行的今天,轻薄本越来越吃香,而作为笔记本来讲,没有小键盘,亦或者在进行数字输入的时候就会效率提不上来,种种诟病。作为数码爱好者亦或者上班办公,不论是使用wps还是使用网页
孤尽和键盘侠一则莫须有的指控,让开课吧以及开课吧新任CTO孤尽陷入了一场争议中。几天前,一则关于开课吧CTO孤尽职级造假的新闻在脉脉上不胫而走。有网友在脉脉上发布了关于孤尽职级造假的情况,称他
百城万里驭鉴实力!坦克300弄潮之旅探境中原大地10月26日,弄潮之旅第一季之坦克300百城万里接力行从合肥整装再出发,经亳州向中原核心城市郑州壮游挺进。此次活动紧贴坦克300硬派潮品产品特性,全国地区主流媒体化身潮玩品鉴官,与
咕咚运动舒缓拖鞋,触摸脚底的顺滑拖鞋大家都穿过,有棉拖,凉拖,皮拖,种类繁多,眼花缭乱。不论是工作一天回到家还是跑步运动之后穿拖鞋更换衣物,总会让拖鞋伴你左右。而对于拖鞋的重新认识要从咕咚运动舒缓拖鞋开始讲起,原
小ck母亲节专属优惠包包鞋子墨镜全五折CK香港官网大降价啦!鞋包低至5折!5折!5折!不光是包包,还有鞋子眼镜等买满2件以上额外享受9折的优惠夏天马上来啦装备要全套才配得上完美美靯眼镜篇包包篇夏季来临之季也是换包之季宝
国潮运动鞋,平价好看还百搭,简直国货之光最近HM事件想必大家都知道了,很多网友表示一觉起来竟发现没有鞋子可穿了。今天小宝打算狠狠来一集国货种草,推荐一波平价好看还百搭,并具有潮牌灵魂的国潮鞋。01hr李宁烛龙经典休闲鞋李
又被蔻驰新包种草了!6款大热的包款,每个都超好看海南免税店首届手袋节,到底是什么宝藏节日啊!不仅各品牌包包最高享6倍积分,各当红新品也集结在这,真的是囤包狂魔的福利!阿宝在这个宝藏节日里,发现好多蔻驰大热的新款包包,每个都超级无
百元西圣蓝牙耳机,市场竞争激烈角逐由此开始自从有线耳机慢慢被无线蓝牙耳机逐渐替代的时候,蓝牙耳机的攻势已经箭在弦上,因此对于目前市场上的蓝牙耳机的甄别和选择显得尤为重要。单从价格角度以及外观设计以及音效等方面考虑,不求完美
咕咚10K运动跑鞋,送给妈妈的礼物生命来自于运动,跑步走路骑行健身房等等都是你的运动方向,这些运动都是为了能够更多地减少因为看手机打游戏等长时间的坐着而导致的种种小毛病。因此还是让我们不找借口,拿一定的学费也是可以
动漫IP小黄人的联名产品,努比亚也变成黄颜色了时光荏苒,岁月如梭,不知不觉间距离2021年5月20日,已经过去了2个多月了。记得520那一天,努比亚举发布了Z系列最新一代影像旗舰努比亚Z30Pro手机。同时在这场星影相随的主题