8. String to Integer (atoi)
1.問題
2.想法
提問
是不是只會輸出一個數字-> 不須轉換每個substring
正負號
function header, parameter
test input
空白 + 數字
integer overflow
說明想法
invalidate的情形:
字串 + 數字
兩個正負號 + 數字
忽略空白, 遇到正負號讀取後index + 1
處理overflow
加之前與加之後必須數值相同
backup = sum;
sum = sum * 10 + ans;
if (sum < 0 || backup != (sum - ans) / 10) {
return sign > 0 ? INT_MAX : INT_MIN;
}
測試
計算複雜度: O(n)?
3.程式碼
class Solution {
public:
int myAtoi(string str) {
if (str.empty()) {
return 0;
}
int size = str.length(), i = 0, sign = 1, sum = 0, backup = 0;
//如果碰到空白就往後移
while (i < size && str[i] == ' ') {
i++;
}
//判斷符號
if (str[i] == '+') {
sign = 1;
i++;
} else if (str[i] == '-') {
sign = -1;
i++;
}
while (i < size && isdigit(str[i])) {
int ans = int(str[i] - '0');
backup = sum;
sum = sum * 10 + ans;
if (sum < 0 || backup != (sum - ans) / 10) {
return sign > 0 ? INT_MAX : INT_MIN;
}
i++;
}
return sum * sign;
}
};
Last updated