leetcode之路008 String to Integer (atoi)
2015-07-26 21:02
197 查看
题目大意:实现atoi的功能,把一个字符串转化为整数。
首先的考虑所有的情况,有以下:
1、字符串为空,返回0;
2、字符串中含有‘ ’空格字符,则需要跳过所有空格;
3、考虑符号问题,‘-’和‘+’,最开始自己就没想到‘+’也要考虑;
4、然后必须为数字0-9,如果不为数字,则返回前面已经确定的值。例:“-123a87”,返回的是-123,而不是直接返回错误的值,这这也是最开始完全没想到的,以为直接返回0即可。
5、超出范围问题,超过INT_MAX则返回INT_MAX,小于INT_MIN则返回INT_MIN。刚开始想到要考虑此问题,但以为是返回0,因为也出错。
看似简单的一个题,需要考虑的情况太多,很容易出错,这也是此题ac率只有12%的原因,但题目不说清楚各种情况的返回值值得吐槽。
下面是ac的代码,时间12ms:
讨论区更简单的实现代码如下:
首先的考虑所有的情况,有以下:
1、字符串为空,返回0;
2、字符串中含有‘ ’空格字符,则需要跳过所有空格;
3、考虑符号问题,‘-’和‘+’,最开始自己就没想到‘+’也要考虑;
4、然后必须为数字0-9,如果不为数字,则返回前面已经确定的值。例:“-123a87”,返回的是-123,而不是直接返回错误的值,这这也是最开始完全没想到的,以为直接返回0即可。
5、超出范围问题,超过INT_MAX则返回INT_MAX,小于INT_MIN则返回INT_MIN。刚开始想到要考虑此问题,但以为是返回0,因为也出错。
看似简单的一个题,需要考虑的情况太多,很容易出错,这也是此题ac率只有12%的原因,但题目不说清楚各种情况的返回值值得吐槽。
下面是ac的代码,时间12ms:
class Solution { public: int myAtoi(string str) { int flag=0; long long resu=0; int j=0; if(str.length()==0) return 0; while(str[j]==' ')++j; str=str.substr(j,str.length()-j); if(str[0]=='-') { flag=1; str=str.substr(1,str.length()-1); } else if(str[0]=='+') str=str.substr(1,str.length()-1); for(int i=0;i<str.length();++i) { if(str[i]>='0'&&str[i]<='9'&&resu<INT_MAX) resu=10*resu+(str[i]-'0'); else break; } if(flag)resu=flag?-resu:resu; if(resu>INT_MAX)resu=INT_MAX; else if(resu<INT_MIN)resu=INT_MIN; return resu; } };
讨论区更简单的实现代码如下:
int myAtoi(string str) { long result = 0; int indicator = 1; for(int i = 0; i<str.size();) { i = str.find_first_not_of(' '); if(str[i] == '-' || str[i] == '+') indicator = (str[i++] == '-')? -1 : 1; while('0'<= str[i] && str[i] <= '9') { result = result*10 + (str[i++]-'0'); if(result*indicator >= INT_MAX) return INT_MAX; if(result*indicator <= INT_MIN) return INT_MIN; } return result*indicator; } }
相关文章推荐
- ubuntu安装luci
- MyEclipse快捷键大全
- OpenGL教程翻译 第一课 Create a window
- Google Play 服务提示更新、Google play 闪退等问题
- MediaElement教程
- 软件项目管理(CMMI成熟度)实践——之集成测试
- Product
- POJ 1111----F - 广搜 基础
- 关于android ui开发处理的问题
- java实现选择排序
- 栈和队列常见题型(java版)
- ANT+ 之【心率传感器设计】【上】
- 机器学习实战
- IceCave
- 百练6044--鸣人与佐助(BFS)
- 通过SkinResource实现的应用皮肤动态识别切换
- PAT (Advanced Level) 1051. Pop Sequence (25) 是否为pop序列,模拟栈的操作
- hdu 3068 manacher算法
- 简单的树
- c++的四种类型转换