タイトル
文字列を整数に変換Inplement ATOI。
注意:
- 空白文字としてスペース文字「」を考えてみましょう。
- 最初の非空白文字は、数値の桁または+/-記号でなければなりません。
環境を想定して32ビット符号付き範囲内にすることができる唯一のストア整数:\([ - 2 ^ {31}、\ 2 ^ {31} -1] \)
C ++のアイデア
重要な問題は、様々な条件が満たされなければならないということです。- 先頭のスペース
- の符号を処理
- オーバーフロー判断
デジタル処理
int myAtoi(string str){
int p = 0, flag = 1;
while(str[p] == ' '){ //空格的处理
p++;
}
if(str[p] == '+'){ //正负号的处理
p++;
}
else if(str[p] == '-'){
flag = -1;
p++;
}
long resInt = 0;
for(int i = p; i < str.size(); i++){
if(str[i] < '0' || str[i] > '9') break;
int temp = str[i] - '0'; //将字符转化为数字
resInt = 10 * resInt + temp;
if(flag == 1){ //溢出判断
if(resInt > INT_MAX) return INT_MAX;
}
else{
if(resInt - 1 > INT_MAX) return INT_MIN; //除去符号,INT_MAX与INT_MIN只相差1
}
}
resInt = sign * resInt;
return resInt;
}
Pythonのアイデア
- str.strip(RM)は、文字列のRM内、strの文字の最初と最後に削除しました
- str.lstrip(RM)があり、文字列のRM、STRの先頭に文字を削除するには
- str.rstrip(RM)は、STRの末尾の文字を削除する位置の文字列RM
- 異常入力をチェックしてみてください-除くブロックを使用して
- 正規表現、再モジュール
\ dは\ D +は、複数の桁を表し、[0,9]の数字を表し
、^が一致文字列の先頭を表しますか
- ?一致繰り返す前の文字または部分式0又は1を表し
re.search最初文字列全体をスキャンし、成功したマッチを返し、一致がオブジェクトマッチング成功戻る、そうでない場合はなし
)グループ()(パケットを使用することです正規表現はマッチしたパケットの内容を示す、同封します。グループ()は、対応するグループのタプルを出力します。
def myAtoi(self, str):
str = str.lstrip();
try:
res = int(re.search('^[\+\-] ? \d+', str).group());
except:
res = 0;
return min(max(-2147483648, res), 2147483647)