LeetCode String to Integer (atoi)
来源:互联网 发布:微博怎么设置个性域名 编辑:程序博客网 时间:2024/06/07 01:21
一、试题
Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button to reset your code definition.
spoilers alert… click to show requirements for atoi.
二、代码
试了好多次
static int x=[](){ // toggle off cout & cin, instead, use printf & scanf std::ios::sync_with_stdio(false); // untie cin & cout cin.tie(NULL); return 0; }();class Solution {public: int myAtoi(string str) { 空字符直接返回 if(str.size()==0) return 0; 该题中只会开头出现空格,除掉 int pos=0; if( (pos = str.find_first_not_of(' '))!=0 ) str.erase(0,pos); 对第一个字符进行专门处理 long long res = 0; bool flag=false; if(str[0]=='-') flag = true; else if(str[0]>='1' && str[0]<='9'){ res = str[0]-'0'; }else if(str[0]!='+' && str[0]!='0') return 0; 除去开头的0 if( (pos = str.find_first_not_of('0',1))!=1 && str[0]<'1' && str[0]>'9') str.erase(0,pos); else str.erase(0,1); 正常遍历处理 for(int j=0; j<str.size(); j++){ if(str[j]>='0' && str[j]<='9'){ res = 10*res+str[j]-'0'; }else break; if(flag && -res<INT_MIN){ res = -INT_MIN; break; } if(!flag && res>INT_MAX){ res = INT_MAX; break; } } return flag?-res:res; }};
别人代码写的就是优雅:
一开始除掉空格,然后在对正负号进行判断时如果判断为正负号则位置i++,这样可以保证为正负号时i会变成第一位数字,不为时还是第一位数字。另外开头的0其实对于计算过程没有影响。第三就是在判断INTMAX和INTMIN巧妙利用INTMIN绝对值大于INTMAX仅是1,判断大于INTMAX后可以直接通过正负号判定输出。
static int x=[](){ // toggle off cout & cin, instead, use printf & scanf std::ios::sync_with_stdio(false); // untie cin & cout cin.tie(NULL); return 0; }();class Solution {public: int myAtoi(string str) { int i = str.find_first_not_of(' '), s = 1; long res = 0; if(str[i]=='+'||str[i]=='-') s = (str[i++]=='+')?1:-1; while(isdigit(str[i])) { res = res*10 + (str[i++]-'0'); if(res>INT_MAX) return s>0?INT_MAX:INT_MIN; } return s*res; }};
- LeetCode:String to Integer (atoi)
- LeetCode: String to Integer (atoi)
- LeetCode String to Integer(atoi)
- LeetCode :String to Integer (atoi)
- Leetcode: String to Integer (atoi)
- Leetcode : String to Integer (atoi)
- 【leetcode】String to Integer (atoi)
- [LeetCode]String to Integer (atoi)
- LeetCode-String to Integer (atoi)
- [leetcode] String to Integer (atoi)
- LeetCode - String to Integer (atoi)
- 【leetcode】String to Integer (atoi)
- LeetCode - String to Integer (atoi)
- LeetCode: String to Integer (atoi)
- Leetcode: String to Integer (atoi)
- [LeetCode] String to Integer (atoi)
- leetcode String to Integer (atoi)
- [LeetCode]String to Integer (atoi)
- 17、ES6 圆括号的问题
- 非线性误差计算
- 【工厂模式】工厂方法和抽象工厂模式
- mysql数据库
- 死锁
- LeetCode String to Integer (atoi)
- 2017 后端面试经历分享
- JS闭包
- 【计算机视觉】【神经网络与深度学习】深度学习在图像超分辨率重建中的应用
- 目录——Web第三阶段:Javascript
- es6新特性之generator
- Codeforce 868 C Qualification Rounds (计数原理)
- 多媒体编辑模块架构设计
- HDU5655