笔试题21 . LeetCode OJ (8)
2016-04-11 18:24
197 查看
class Solution { public: int myAtoi(string str) { //+- 12 返回类型为整形,所以不用考虑小数点,遇到小数点就返回了 int ret = 0; int len = str.size(); if (len == 0) { return ret; } bool isminus = false; //正负号 //int numofpoint=0; //小数点 int i = 0; while (str[i] == ' ') {//处理空格 ++i; } if (str[i] == '-') {//开始为 - 符合 isminus = true; i++; } else if (str[i] == '+') {//开始为 + 符合要求 i++; } //处理完正负了 while (i < len) {//越界问题, if (str[i] >= '0' && str[i] <= '9') {//正常数字 if (ret > 214748364 && !isminus) {//乘以10后越界 return 2147483647; } else if (ret > 214748364 && isminus) {//乘以10后越界 return 2147483648; } ret = ret * 10 + str[i] - '0'; if (ret >= 2147483647 && !isminus) {//加上str[i]后越界 return 2147483647; //最大整数 } else if (ret >= 2147483648 && isminus) {//加上str[i]后越界 return 2147483648; //最小负整数 } else if (ret < 0 && isminus) { return 2147483648; } ++i; } else {//不是正常数字 break; } } if (isminus) {//负数 return ret*(-1); } else if (ret < 0 && !isminus) { return 2147483647; } return ret; } };
这道题是实现C++库中的 atoi 函数,拿到这个题的时候自信心一下子就报表了,so easy ,可是提交了好多次后还是无法通过。看似简单的问题确实陷阱好多啊。我来分析一下这个题中需要注意哪些细节。
1. 空格,字符串数字之前可以有任意个空格,需要先处理这些空格。
2. ‘+’,‘-’ 这两个符号只能出现一次,重复出现就返回0。
3. 越界问题,需要考虑两种情况(1).在乘以10之前需要考虑乘以10后会不会越界 (2).加上个位数后会不会越界
4.正数越界返回最大的整形正整数,负数越界后返回最小的整形负数。
5.遇到非数字的符号返回现在所能表示的整数。
相关文章推荐
- 京东VS猫宁,运费或将成为压垮京东的最后一根稻草
- SQL Server 用户名sa登陆出错
- git常用命令
- java学习-【转】【经验总结】NIO常见的陷阱解析
- java学习-【转】32位jvm还是64位jvm?
- java学习-【转】JAVA 线程池源码分析
- java学习-【转】如何用Java编写一段代码引发内存泄露
- java学习-【转】SharedHashMap是更低延迟无GC暂停的Map实现
- java并发:AbstractQueuedSynchronizer的介绍和原理分析
- java学习-【转】java UncaughtExceptionHandler 处理线程意外中止
- 【转】细数JDK里的设计模式
- java学习-【转】JAVA并发类名图
- 缓存学习-【转】缓存淘汰算法--LRU算法
- 缓存学习-[转]缓存淘汰算法--LFU算法
- java学习-[转]HashMap实现原理分析
- java学习-浅淡JAVA异常机制如何设计
- 学习-在Centos下安装Nginx教程
- java学习-NIO和IO的区别
- java基础学习-java常用对象的内存占用大小
- java并发学习:synchronized 的不足之处