8. 字符串转换整数 (atoi)
目录
题目链接:
题目:
解题思路:
代码:
总结:
题目链接:
8. 字符串转换整数 (atoi) - 力扣(LeetCode)
题目:
解题思路:
先将字符串转换成字符数组,空格遍历掉,然后遍历正负号,然后遍历累加即可,若遇到非数字直接停止另外在累加的过程中,需要判断是否越界,若越界直接返回int类型的边界即可(如果res大于最大值/10或者小于最小值)直接返回,(或者res==最大值/10并且下一位大于极值的末尾)直接返回
代码:
class Solution {public int myAtoi(String m) {int n=m.length();int idx=0;char[] s=m.toCharArray();while(idx<n&&s[idx]==' '){idx++;}if(idx==n){return 0;}int flag=1;char signal=s[idx];if(signal=='-'){flag=-flag;idx++;}else if(signal=='+'){idx++;}int res=0;while(idx<n){char x=s[idx];if(x<'0'||x>'9'){break;}if(res>Integer.MAX_VALUE/10||res==Integer.MAX_VALUE/10&&((x-'0')>Integer.MAX_VALUE%10)) return Integer.MAX_VALUE;if(res<Integer.MIN_VALUE/10||res==Integer.MIN_VALUE/10&&(x-'0')>-(Integer.MIN_VALUE%10)) return Integer.MIN_VALUE;res=res*10+flag*(x-'0');idx++;}return res;}
}
总结:
本文介绍了字符串转换整数(atoi)的解题方法。主要思路是:先处理前置空格,然后判断正负号,接着遍历数字字符进行转换,同时处理溢出情况。关键点在于:1)跳过前导空格;2)处理正负号;3)逐位转换时检查是否超出32位整数范围(当当前结果大于MAX_VALUE/10或等于MAX_VALUE/10且下一位数字大于MAX_VALUE%10时返回边界值)。该方法通过字符数组遍历实现,时间复杂度O(n),空间复杂度O(n)。