版权声明:本文为博主原创文章,未经博主允许欢迎转载。 https://blog.csdn.net/paulkg12/article/details/84945355
前言
最近有道云笔记老是没响应,会员也这样,所以把算法的笔记公开到这个csdn,也算是公开的鞭策。
题目常练习起点位置: https://www.nowcoder.com/ta/coding-interviews?asc=false&order=knowledgePoint
题目
解答
public class Solution {
public int StrToInt(String str) {
if (str == null || str.length() == 0) return 0;
char [] chars = str.toCharArray();
boolean hasSign = false;
boolean isNeg = false;
if (chars[0] == '+' || chars[0] == '-') hasSign = true;
if (chars[0] == '-') isNeg = true;
for (char c : chars) {
if (c >= 'a' && c <= 'z') {
return 0;
}
}
int ret = 0;
if (hasSign) {
for (int i = 1; i < chars.length; i++) {
ret = ret * 10 + (chars[i] - '0');
}
if (isNeg){
ret *= -1;
}
}
else {
// no sign
for (int i = 0; i < chars.length; i++) {
ret = ret * 10 + (chars[i] - '0');
}
}
return ret;
}
}
恭喜你通过本题
运行时间:17ms
占用内存:9004k
改进
把
if (c >= 'a' && c <= 'z') {
return 0;
}
塞到下面的循环里,没有必要两次遍历
for (int i = 1; i < chars.length; i++) {
// ADD HERE
if (c /* 也就是chars[i]*/ >= 'a' && c <= 'z') {
return 0;
}
ret = ret * 10 + (chars[i] - '0');
}