Leecode 8: String to Integer (atio)
来源:互联网 发布:中国知网专利数据库 编辑:程序博客网 时间:2024/06/05 20:44
Leecode 8:String to Integer (atio)
题目中大致的意思是将一个string型变量转化为int型变量,并没有涉及到边界条件,都是需要自己去界定的,设输入的字符串为str,这题包含的边界条件有如下:
(1)如果字符串str为空串,此时返回0;(如 str = "",输出为0)
(2)如果字符串str之前有空格时,需要跳过这些空格;(如str = " -123",输出-123)
(3)如果字符串str从前向后第一个非空格字符不是‘0’~‘9’,返回0;(如str = “a111”,输出0)
(4)如果字符串str从前向后第一个非空格字符是‘+’或者‘-’,str仍然有效,即需要跳过+和-转化后面的字符串;(如str = “+123”,返回123,;str = "-123",返回-123)
(5)如果字符串sr转化后的数大于int型的最大值,返回int型的最大值,即INT_MAX;
(6)如果字符串str转化后的数小于int型的最小值,返回int型的最小值,即INT_MIN;
(7)如果只转化从字符串str第一个非空格字符的位置起,到下一个非‘0’~‘9’的字符结束中的内容。(如str = " -123a34",,输出为-123,而忽略后面的“a34”)
将以上的边界条件考虑到代码中,转化的过程就是取每一位的字符(‘0’~‘9’),减去‘0’转化为数字,在进行拼接,可以得到代码的第一个版本:
class Solution {public: int myAtoi(string str){int n = str.length() ;if(n == 0) return 0; //约束(1)long long result = 0;bool flag = true;bool isDelete = false;bool time = true; int start = 0;for(int i = 0; i < n && flag; i++){while(str[i] == ' ' && flag && time && i < n) //使用time来控制只执行一次,即跳过开始的所有空格,约束(2){i ++;start ++;}time = false;if(str[i] > '9' || str[i] < '0') //约束(3),约束(7)flag = false;if(i == start && (str[i] == '+' || str[i] == '-')) //约束(4){if(str[i] == '-') //针对-号,要另外区别,在最后的结果乘以-1isDelete = true;flag = true;str[i] = '0';}if(flag) result = result * 10 + str[i] - '0'; //转化过程if(result > INT_MAX) break;}if(isDelete) result *= -1;if(result > INT_MAX) return INT_MAX; //约束(5)if(result < INT_MIN) return INT_MIN; //约束(6)return (int)result; }};以上代码运行时间为12ms,在提交的结果里面已经很慢了,我就在上面的代码版本上重新组织了一下,进行了优化,优化版本如下:
class Solution {public: int myAtoi(string str){int n = str.length() ;if(n == 0) return 0;int start = 0;while(str[start] == ' ') start ++; //跳过开始所有的空格bool isDelete = false; if(str[start] == '-') isDelete = true; //如果开头是-号if((str[start] == '+') || isDelete) start ++; //如果开头是+号或者-号,则跳过+和-long long result = 0; //使用long long型变量,用来控制越界问题for(int i = start; i < n && str[i] >= '0' && str[i] <= '9'; i++){ result = result * 10 + str[i] - '0'; if(result > INT_MAX) break; //一旦发现有越界问题,则终止}if(isDelete) result *= -1;if(result > INT_MAX) return INT_MAX; //大于int最大值的取最大值if(result < INT_MIN) return INT_MIN; //小于int最小值的取最小值return (int)result; }};优化好的代码运行时间为8ms,速度还可以啦!!!
第一次在CSDN上发帖,刚好今天晚上在刷Leecode,就把Leecode第8的题的代码搬上来了,大家有什么更好的代码也可以贴出来交流交流呢!!!
1 0
- Leecode 8: String to Integer (atio)
- LeeCode-String to Integer (atoi)
- LeeCode String to Integer (atoi)
- LeeCode-Roman to Integer
- LEECODE-Roman to Integer
- String to Integer---8
- 8:String to Integer
- 8、String to Integer (atoi)
- 8,String to Integer (atoi)
- 8 String to Integer (atoi)
- 8 String to Integer (atoi)
- #8 String to Integer (atoi)
- 8String to Integer (atoi)
- 8 String to Integer (atoi)
- 8 - String to Integer (atoi)
- [8]String to Integer (atoi)
- 8、String to Integer (atoi)
- leetcode-8 String to Integer
- Html笔记 3
- oscache
- hdu1496 Equations(哈希表)
- 我要成为一个技术大牛啊
- NKOI 3662 划区灌溉
- Leecode 8: String to Integer (atio)
- c 编译器及#define和typedef
- Android Activity彻底运行起来之后的回调onPostCreate( )
- [概率DP] Topcoder SRM687div2 1000 Queueing
- quartus ii 11.0安装破解破解方法:
- 利用Xcode Profile和Analyze进行性能优化
- 一个基于场景感应的android智能手机防丢失系
- leetcode 28 Implement strStr()
- SSH框架搭建