字符串转换整数 (atoi)-来自leetcode的领悟

    科技2026-03-31  13

    字符串转换整数 (atoi)

    原题大致意思(其实也是解题思路): 首先:丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止;不能是空串;第一个字符不能是非法字符,可以是正负号或者数字;数字部分不能包含非法字符。

    注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。 在任何情况下,若函数不能进行有效的转换时,请返回 0 。

    Character.isDigit(str.charAt(0))判断下标为0的字符是否为数字,是返回真,否返回假。

    class Solution { public int myAtoi(String str) { str = str.trim();//去除空格 if (str.length() == 0) return 0; if(!Character.isDigit(str.charAt(0))&&str.charAt(0)!='+'&&str.charAt(0)!='-') return 0;//既不是数字也不是正负号,说明是非法字符。 int tn = Character.isDigit(str.charAt(0))?0:1;//剩下的是符号加数字(含有非法数字)或纯数字(含有非法数字),获取数字部分下标,这样容易先进行数字组合 long ans = 0L; boolean f = str.charAt(0) == '-';//最后部分return时加上符号 while(str.length()>tn && Character.isDigit(str.charAt(tn)))//排除只有符号和数字部分混杂非法字符 { ans =ans*10 + (str.charAt(tn++)-'0'); if(f&&ans>Integer.MAX_VALUE) { ans = 1L + Integer.MAX_VALUE; break; }//超出范围的极大负数 if(!f&&ans>Integer.MAX_VALUE) { ans = Integer.MAX_VALUE; break; }//超出范围的极大正数 } return !f?(int)ans :(int)-ans; } }

    原题欣赏

    Processed: 0.011, SQL: 9