文章目录如下
(1)自己的思路
(2)自己的代码
(3)别人的思路
(4)别人的代码
(5)对比自己的不足之处
(1)自己的思路
首先这道题的核心思想是数字与字符之间的转换,两个的联系便是ASCI码的关联。即如果字符x在'0'到'9'之间,那么x-'0'便是x对应的真是的数值。在具体构造返回数值方面,与上一篇思路差不多。
(2)自己的代码
class Solution { public: int myAtoi(string str) { //使用ascii码转换即可 48-57 int tmp = 0; for (int i = 0; i<str.length(); i++) { if (str[i] >= '0'&&str[i] <= '9') { tmp = tmp * 10 + (str[i] - '0'); } } if (str[0] == '-') tmp = 0 - tmp; return tmp; } };
(3)思路与我差不多,但是考虑到了空格,+,-号的问题
(4)别人的代码
class Solution { public: int myAtoi(string str) { int num = 0; int sign = 1; const int n = str.length(); int i = 0; while (str[i] == ' ' && i < n) i++; if (str[i] == '+') { i++; } else if (str[i] == '-') { sign = -1; i++; } for (; i < n; i++) { if (str[i] < '0' || str[i] > '9') break; if (num > INT_MAX / 10 || (num == INT_MAX / 10 && (str[i] - '0') > INT_MAX % 10)) { return sign == -1 ? INT_MIN : INT_MAX; } num = num * 10 + str[i] - '0'; } return num * sign; } };
(5)对比自己的不足之处
其实关于别人的答案我也有着自己的质疑,例如"--2342"这种情况就不能处理,所以虽然我的代码有很多不足,但是如果把别人的代码当做答案我也觉得有些牵强,但是做题嘛,主要是锻炼思维,开心就好啦~