{ "question_id": 8, "question_title": "字符串转换整数 (atoi)", "difficulty": "中等", "question_content": "
\n\t

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

\n\n\t

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

\n\n\t\n\n\t

注意:

\n\n\t\n\n\t

 

\n\n\t

示例 1:

\n\n\t
输入:s = \"42\"\n输出:42\n解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。\n第 1 步:\"42\"(当前没有读入字符,因为没有前导空格)\n\t\t ^\n第 2 步:\"42\"(当前没有读入字符,因为这里不存在 '-' 或者 '+')\n\t\t ^\n第 3 步:\"42\"(读入 \"42\")\n\t\t   ^\n解析得到整数 42 。\n由于 \"42\" 在范围 [-231, 231 - 1] 内,最终结果为 42 。
\n\n\t

示例 2:

\n\n\t
输入:s = \"   -42\"\n输出:-42\n解释:\n第 1 步:\"   -42\"(读入前导空格,但忽视掉)\n\t\t\t^\n第 2 步:\"   -42\"(读入 '-' 字符,所以结果应该是负数)\n\t\t\t ^\n第 3 步:\"   -42\"(读入 \"42\")\n\t\t\t   ^\n解析得到整数 -42 。\n由于 \"-42\" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。\n
\n\n\t

示例 3:

\n\n\t
输入:s = \"4193 with words\"\n输出:4193\n解释:\n第 1 步:\"4193 with words\"(当前没有读入字符,因为没有前导空格)\n\t\t ^\n第 2 步:\"4193 with words\"(当前没有读入字符,因为这里不存在 '-' 或者 '+')\n\t\t ^\n第 3 步:\"4193 with words\"(读入 \"4193\";由于下一个字符不是一个数字,所以读入停止)\n\t\t     ^\n解析得到整数 4193 。\n由于 \"4193\" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。\n
\n\n\t

示例 4:

\n\n\t
输入:s = \"words and 987\"\n输出:0\n解释:\n第 1 步:\"words and 987\"(当前没有读入字符,因为没有前导空格)\n\t\t ^\n第 2 步:\"words and 987\"(当前没有读入字符,因为这里不存在 '-' 或者 '+')\n\t\t ^\n第 3 步:\"words and 987\"(由于当前字符 'w' 不是一个数字,所以读入停止)\n\t\t ^\n解析得到整数 0 ,因为没有读入任何数字。\n由于 0 在范围 [-231, 231 - 1] 内,最终结果为 0 。
\n\n\t

示例 5:

\n\n\t
输入:s = \"-91283472332\"\n输出:-2147483648\n解释:\n第 1 步:\"-91283472332\"(当前没有读入字符,因为没有前导空格)\n\t\t ^\n第 2 步:\"-91283472332\"(读入 '-' 字符,所以结果应该是负数)\n\t\t  ^\n第 3 步:\"-91283472332\"(读入 \"91283472332\")\n\t\t            ^\n解析得到整数 -91283472332 。\n由于 -91283472332 小于范围 [-231, 231 - 1] 的下界,最终结果被截断为 -231 = -2147483648 。
\n\n\t

 

\n\n\t

提示:

\n\n\t\n
", "topic_link": "https://bbs.csdn.net/topics/600470794", "cpp": "int myAtoi(char *str)\n{\n\tint i = 0;\n\tint sign = 0;\n\twhile (str[i] && str[i] == ' ')\n\t\ti++;\n\tif (str[i] == NULL)\n\t\treturn 0;\n\tif (str[i] == '-')\n\t{\n\t\tsign = 1;\n\t\ti++;\n\t}\n\telse if (str[i] == '+')\n\t{\n\t\tsign = 0;\n\t\ti++;\n\t}\n\telse if (str[i] < '0')\n\t\treturn 0;\n\telse if (str[i] > '9')\n\t\treturn 0;\n\tlong long int r = 0;\n\twhile (str[i])\n\t{\n\t\tif (str[i] < '0')\n\t\t\tbreak;\n\t\telse if (str[i] > '9')\n\t\t\tbreak;\n\t\telse\n\t\t\tr = r * 10 + str[i++] - '0';\n\t\tif (r > INT_MAX)\n\t\t\tbreak;\n\t}\n\tr = sign ? -r : r;\n\tif (r < INT_MIN)\n\t\treturn INT_MIN;\n\tif (r > INT_MAX)\n\t\treturn INT_MAX;\n\treturn (int)r;\n}", "java": "class Solution {\n\tpublic int myAtoi(String s) {\n\t\tlong y = 0;\n\t\tint i = 0;\n\t\tboolean w = false;\n\t\tboolean sign = false;\n\t\tint offset = 0;\n\t\tchar[] ints = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };\n\t\twhile (i < s.length()) {\n\t\t\tchar c = s.charAt(i);\n\t\t\tboolean isSign = false;\n\t\t\tif (w == false && c != ' ') {\n\t\t\t\tw = true;\n\t\t\t\tif (c == '-') {\n\t\t\t\t\tsign = true;\n\t\t\t\t\tisSign = true;\n\t\t\t\t}\n\t\t\t\tif (c == '+') {\n\t\t\t\t\tisSign = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (w && (!isSign)) {\n\t\t\t\tint v = Arrays.binarySearch(ints, c);\n\t\t\t\tif (v < 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ty = y * 10 + v;\n\t\t\t\tif (y > 0x7FFFFFFF) {\n\t\t\t\t\ty = 0x7FFFFFFF;\n\t\t\t\t\toffset = 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\treturn sign ? -(int) (y + offset) : (int) y;\n\t}\n}", "js": "/**\n * @param {string} str\n * @return {number}\n */\nvar myAtoi = function(str) {\n let y=0;\n let i=0;\n let w=false;\n let sign=false;\n const ints=['0','1','2','3','4','5','6','7','8','9'];\n while(i0x7FFFFFFF){\n \ty = 0x7FFFFFFF;\n offset = 1;\n }\n return sign ? -(y+offset) : y;\n};\n\nfunction main(){\n\n}\n\nmain();\n", "python": "class Solution:\n\tdef myAtoi(self, s: str) -> int:\n\t\ty = 0\n\t\ti = 0\n\t\tw = False\n\t\tsign = False\n\t\tints = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']\n\t\twhile i < len(s):\n\t\t\tc = s[i]\n\t\t\tisSign = False\n\t\t\tif w == False and c != ' ':\n\t\t\t\tw = True\n\t\t\t\tif c == '-':\n\t\t\t\t\tsign = True\n\t\t\t\t\tisSign = True\n\t\t\t\tif c == '+':\n\t\t\t\t\tisSign = True\n\t\t\tif w and not isSign:\n\t\t\t\ttry:\n\t\t\t\t\tv = ints.index(c)\n\t\t\t\t\ty = y*10+v\n\t\t\t\texcept:\n\t\t\t\t\tbreak\n\t\t\ti += 1\n\t\toffset = 0\n\t\tif y > 2147483647:\n\t\t\ty = 2147483647\n\t\t\toffset = 1\n\t\treturn -(y+offset) if sign else y\n# %%\ns = Solution()\nprint(s.myAtoi(s = \"42\"))", "status": 1, "keywords": "字符串", "license": { "cpp": "csdn.net", "python": "csdn.net", "java": "csdn.net" }, "notebook": { "cpp": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/7/7_cpp.ipynb?type=file", "python": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/7/7_python.ipynb?type=file", "java": "https://codechina.csdn.net/csdn/csdn-daily-code/-/jupyter/master/data/notebook/leetcode/ipynb/7/7_java.ipynb?type=file" }, "notebook_enable": 1 }