leetcodeProblem8 String to Integer解题报告

来源:互联网 发布:网络代销哪家好 编辑:程序博客网 时间:2024/06/12 08:32

这一题核心解法很容易,只要读出每个字符,减去'0',得出真实int值,再进行累加res = res*10+strnum就可以了

这题主要是细枝末节要考虑很多

1.去除字符串 前面的空白符

2.如果有+-号,只能有一个,如果两个都有,认为无效,返回 0

3.如果字符串所代表的值,超出int 32位的表示界限,返回各自的极值,达到max,返回int32_max,达到min,返回int32_min

解题方法:

空白符号,用str.erase(0, str.find_first_not_of(" "));这个函数解决

+-号,trim后,首先判断符号,定义一个int flag,表示正负

之后判断字符串是否包含数字,如果有,通过自增的形式 得到长度len ,

一旦读取到非数组字符,立即break,

(同时判断是否有+-号,如果还有,直接返回 0)用

str = str.substr(0,len)获取字符数字子串

之后进行解析计算。

代码:

string trim(string str) {str.erase(0, str.find_first_not_of(" "));return str;}int myAtoi(string str) {int len = 0;int res = 0;int flag = 1;str = trim(str);if (str[0] == '+') str = str.substr(1);else if (str[0] == '-') {str = str.substr(1);flag = -1;}for (auto strnum : str) {if (strnum == '+' || strnum == '-') return 0;if (strnum >'0' && strnum <'9') {len++;}else{str = str.substr(0,len);break;}}if (str == "") return 0;for (auto strnum : str) {int temp = res * 10 + (strnum - '0');if ((temp-(strnum - '0'))/10!=res||temp<0) {if (flag == 1) return INT32_MAX;else return INT32_MIN;}else{res = temp;}}return res*flag;}




原创粉丝点击