hgq's docs
主页
ES6-阮一峰 (opens new window)
Vue文档 (opens new window)
Axios文档 (opens new window)
Vue Router (opens new window)
Vuex文档 (opens new window)
面试题-Vue (opens new window)
面试题-JS (opens new window)

guoguoqiqi

漫不经心的向往
主页
ES6-阮一峰 (opens new window)
Vue文档 (opens new window)
Axios文档 (opens new window)
Vue Router (opens new window)
Vuex文档 (opens new window)
面试题-Vue (opens new window)
面试题-JS (opens new window)
  • 插入排序
  • 归并排序
  • 快速排序
  • 冒泡排序
  • 选择排序
  • 两数之和
  • 两数相加
  • 无重复字符的最长子串
  • 寻找两个正序数组的中位数
  • 最长回文子串
  • Z 字形变换
  • 整数反转
  • 字符串转换整数 (atoi)
  • 回文数
  • 盛最多水的容器
  • 整数转罗马数字
  • 罗马数字转整数
  • 最长公共前缀
  • 三数之和
  • 最接近的三数之和
  • 电话号码的字母组合
  • 四数之和
  • 删除链表的倒数第 N 个结点
  • 有效的括号
  • 合并两个有序链表
  • 括号生成
  • 合并K个升序链表
  • 两两交换链表中的节点
  • 删除有序数组中的重复项
  • 移除元素
  • 实现 strStr()
  • 两数相除
  • 下一个排列
  • 最长有效括号
  • 搜索旋转排序数组
  • 在排序数组中查找元素的第一个和最后一个位置
  • 搜索插入位置
  • 有效的数独
  • 解数独
  • 外观数列
  • 组合总和
  • 组合总和 II
  • 接雨水
  • 字符串相乘
  • 跳跃游戏 II
  • 全排列
  • 全排列 II
  • 旋转图像
  • Pow(x, n)
  • 最大子数组和
  • 螺旋矩阵
  • 跳跃游戏
  • 合并区间
  • 插入区间
  • 最后一个单词的长度
  • 螺旋矩阵 II
  • 排列序列
  • 旋转链表
  • 不同路径
  • 不同路径 II
  • 最小路径和
  • 加一
  • 二进制求和
  • x 的平方根
  • 爬楼梯
  • 矩阵置零
  • 搜索二维矩阵
  • 颜色分类
  • 组合
  • 子集
  • 单词搜索
  • 删除有序数组中的重复项 II
  • 搜索旋转排序数组 II
  • 删除排序链表中的重复元素 II
  • 删除排序链表中的重复元素
  • 分隔链表
  • 合并两个有序数组
  • 子集 II
  • 解码方法
  • 反转链表 II
  • 二叉树的中序遍历
  • 不同的二叉搜索树
  • 验证二叉搜索树
  • 恢复二叉搜索树
  • 相同的树
  • 对称二叉树
  • 二叉树的层序遍历
  • 二叉树的最大深度
  • 从前序与中序遍历序列构造二叉树
  • 从中序与后序遍历序列构造二叉树
  • 二叉树的层序遍历 II
  • 将有序数组转换为二叉搜索树
  • 有序链表转换二叉搜索树
  • 平衡二叉树
  • 二叉树的最小深度
  • 路径总和
  • 路径总和 II
  • 杨辉三角
  • 杨辉三角 II
  • 验证回文串
  • 最长连续序列
  • 只出现一次的数字
  • 只出现一次的数字 II
  • 环形链表
  • 环形链表 II
  • 二叉树的前序遍历
  • 二叉树的后序遍历
  • 相交链表
  • 寻找峰值
  • 两数之和 II - 输入有序数组
  • 多数元素
  • 重复的DNA序列
  • 移除链表元素
  • 反转链表
  • 组合总和 III
  • 存在重复元素
  • 存在重复元素 II
  • 矩形面积
  • 翻转二叉树
  • 求众数 II
  • 二叉搜索树中第K小的元素
  • 用栈实现队列
  • 回文链表
  • 二叉搜索树的最近公共祖先
  • 二叉树的最近公共祖先
  • 删除链表中的节点
  • 搜索二维矩阵 II
  • 二叉树的所有路径
  • 只出现一次的数字 III
  • 丢失的数字
  • 寻找重复数
  • Nim 游戏
  • 最长递增子序列
  • 最大单词长度乘积
  • 3 的幂
  • 反转字符串
  • 两个数组的交集
  • 有效的完全平方数
  • 两整数之和
  • 组合总和 Ⅳ
  • 赎金信
  • 整数替换
  • 第 N 位数字
  • Fizz Buzz
  • 第三大的数
  • 从英文中重建数字
  • N 叉树的层序遍历
  • 字符串中的单词数
  • 路径总和 III
  • 排列硬币
  • 数组中重复的数据
  • 回旋镖的数量
  • 递增子序列
  • 下一个更大元素 II
  • 完美数
  • 斐波那契数
  • 学生出勤记录 I
  • 反转字符串中的单词 III
  • N 叉树的最大深度
  • 和为 K 的子数组
  • 分糖果
  • 最长和谐子序列
  • 根据二叉树创建字符串
  • 合并二叉树
  • 只有两个键的键盘
  • 有效的括号字符串
  • 二叉搜索树中的搜索
  • 二分查找
  • 分隔链表
  • 宝石与石头
  • 链表的中间结点
  • 救生艇
  • 验证栈序列
  • 最长公共子序列
  • 最长定差子序列
  • 分割平衡字符串
  • 将二叉搜索树变平衡
  • 连续字符
  • 一维数组的动态和
  • 换酒问题
  • 所有奇数长度子数组的和
  • 分式化简
  • 数组中重复的数字
  • 替换空格
  • 从尾到头打印链表
  • 用两个栈实现队列
  • 斐波那契数列
  • 青蛙跳台阶问题
  • 数值的整数次方
  • 打印从1到最大的n位数
  • 删除链表的节点
  • 调整数组顺序使奇数位于偶数前面
  • 合并两个排序的链表
  • 二叉树的镜像
  • 从上到下打印二叉树 II
  • 从上到下打印二叉树 III
  • 二叉搜索树的后序遍历序列
  • 二叉树中和为某一值的路径
  • 字符串的排列
  • 二叉搜索树的第k大节点
  • 二叉搜索树的最近公共祖先
  • 二叉树的最近公共祖先
  • 反转链表
  • 山峰数组的顶部
  • 最小路径之和
  • 返回倒数第 k 个节点
  • 链表求和
  • 检查平衡性
  • 最小K个数
  • 从上到下打印二叉树
  • 第一个只出现一次的字符
  • 字符串相加
  • 算法
guoguoqiqi
2022-03-08

字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。 如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。 返回整数作为最终结果。 注意:

本题中的空白字符只包括空格字符 ' ' 。 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例:

输入:s = "42"
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:"42"(当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"42"(读入 "42")
           ^
解析得到整数 42 。
由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。
1
2
3
4
5
6
7
8
9
10
11
/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function(s) {
   let res = ''
    let i = 0
    let symbol = ''

    let isNumber = /^\d$/

    while ((s[i] === ' ' || s[i] === '-' || s[i] === '+') && !symbol) {
      if (s[i] === '-') symbol = '-'
      if (s[i] === '+') symbol = '+'
        ++i
    }

    s = s.slice(i)
    if (!isNumber.test(s[0])) return 0

    let j = 0
    while (isNumber.test(s[j])) {
      res += s[j]
        ++j
    }

    res = symbol === '-' ?
      (-Number(res) < -Math.pow(2, 31) ? -Math.pow(2, 31) : -Number(res)) :
      (Number(res) > Math.pow(2, 31) - 1 ? Math.pow(2, 31) - 1 : Number(res))

    return res
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/string-to-integer-atoi

← 整数反转 回文数→

最近更新
01
vuex数据持久化怎么做
05-22
02
vue的动态路由怎么配置使用
05-22
03
vue权限控制一般怎么做
05-22
更多文章>
Theme by Vdoing | Copyright © 2022-2022 Guoquoqiqi | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式