8.[LeetCode]String to Integer (atoi)
来源:互联网 发布:怎么申请农村淘宝 编辑:程序博客网 时间:2024/06/03 07:45
这道题看似简单但是其实要考虑各种各样的情况,代码较长
public class Solution { public int myAtoi(String str) { char[] newstr = str.toCharArray(); int size = newstr.length; boolean isPos = true; // 当前数字是正还是负数 boolean allWhite = true; int first = 0; int last = 0; for(int i=0;i<size;i++){ if(newstr[i] != ' ') { allWhite = false; if(newstr[i] == '+') { // 如果遇到了+号,那么判断下一位是否存 && 是不是数字,不是退出返回0 if(i+1<size && isNumber(newstr[i+1])){ first = i+1; break; } else { return 0; } } else if(i+1<size && newstr[i] == '-'){ // 和加号判断同理 if(isNumber(newstr[i+1])){ first = i+1; isPos = false; break; } else { return 0; } } else if(isNumber(newstr[i])){ first = i; break; } else { // 不是 + - 数字中的任何一个则,返回0 return 0; } } } // 如果是全空格状态,返回0 if(allWhite) { return 0; } last = first+1; // 目前的最后一位是在 first的位的下一个 // 获取到第一个数字的位置为 first,那么我们从first开始遍历,获取最后一个数字的位置 for(int i=first;i<size;i++){ if(!isNumber(newstr[i])){ // 如果当前不是数字了,或者是到了最后一位了,那么break,当前位置的前一个为last,也就是最后一个数字位 last = i; break; } if(i == size-1){ // 如果到了最后一位都是数字,那么last就是size last = size; } } // 获取数字子串 String numberStr = str.substring(first,last); // 这里明确substring的范围问题,最后一个之后的位置也是可以取的 char[] numbers = numberStr.toCharArray(); int numberSize = numbers.length; int finalNumber = 0; if(numberSize <= 10){ // 在最长位,10位之内 // todo 转换并输出结果 for(int i=0;i<numberSize;i++){ int temp = (int)(numbers[i]-'0'); if(i==9){ // 如果到了最后一位的话 if(finalNumber > 214748364) { // 大于那么一定是超出的 finalNumber = (isPos)?Integer.MAX_VALUE:Integer.MIN_VALUE; } else if (finalNumber == 214748364){ //等于的话,就要判断当前位置的数字的大小 if((isPos && temp <= 7) || (!isPos && temp <= 8)){ // 满足条件 finalNumber = finalNumber*10 + temp; if(i == numberSize-1){ // 如果到了最后一位,就转换正负号 finalNumber = (isPos)?finalNumber:-finalNumber; } } else { // 超出范围 finalNumber = (isPos)?Integer.MAX_VALUE:Integer.MIN_VALUE; } } else { // 小于的情况下,尽然亡了考虑 finalNumber = finalNumber*10 + temp; if(i == numberSize-1){ // 如果到了最后一位,就转换正负号 finalNumber = (isPos)?finalNumber:-finalNumber; } } } else { finalNumber = finalNumber*10 + temp; if(i == numberSize-1){ // 如果到了最后一位,就转换正负号 finalNumber = (isPos)?finalNumber:-finalNumber; } } } } else if(numberSize > 10){ // 如果长度限制都超出了,那么直接判断大小 // todo 根据正负号输出最大和最小 finalNumber = (isPos)?Integer.MAX_VALUE:Integer.MIN_VALUE; } return finalNumber; } private boolean isNumber(char t){ if(t <= '9' && t >= '0') return true; return false; }}
0 0
- [LeetCode]8. String to Integer (atoi)
- LeetCode 8. String to Integer (atoi)
- 8. String to Integer (atoi) Leetcode Python
- LeetCode --- 8. String to Integer (atoi)
- LeetCode 8.String to Integer (atoi)
- [Leetcode] 8. String to Integer (atoi)
- [leetcode] 8.String to Integer (atoi)
- [LeetCode] 8.String to Integer (atoi)
- <LeetCode OJ> 8. String to Integer (atoi)
- leetCode 8. String to Integer (atoi)
- 8. String to Integer (atoi) LeetCode
- leetcode 8. String to Integer (atoi)
- leetcode 8. String to Integer (atoi)
- LeetCode OJ 8.String to Integer (atoi)
- Leetcode ☞ 8. String to Integer (atoi)
- 8. String to Integer (atoi) ---Leetcode
- leetcode 8. String to Integer (atoi)
- Leetcode: 8. String to Integer (atoi)(JAVA)
- jdbc批处理+事务处理 十万级数据导入
- Swift 单例
- Android开发 这19个开发工具
- HOWTO: Enumerate handles
- FreeCMS视频教程 单位管理
- 8.[LeetCode]String to Integer (atoi)
- http://blogread.cn/it/article/8026
- 练习40——字典, 可爱的字典
- eclipse运行程序时 出现死循环
- Fiddler入门及使用
- 实习即将结束,即将开始找工作
- android 多渠道打包终级教程
- 冒泡排序、直接插入排序及选择排序之Java实现
- 创业?合伙?翻脸?必看7条天规