説明
あなたが機能を実装するために税引後営業利益、それは文字列を整数に変換することができます。
まず、空白文字で始まります関数は、これまでの最初の非空白文字を見つけるまで、必要であれば無用捨てます。
私たちは、整数の印として、後に連続した数字を上にして、可能な限り、最初の非空白文字が正または負の数であるシンボルのコンビネーションを見つけた場合、最初の非空白文字がある場合連続した数字が整数を形成するために結合された直後の図。
また、余分な文字を存在する可能性がある、有効な整数部分の後の文字列に加えて、これらの文字は無視することができ、彼らは機能に影響はありません。
注:最初の非空白文字の文字列が有効な整数文字列が空でない場合、または空白のみの文字列が含まれている場合、あなたは変換の機能である必要はありません。
いずれにしても、機能が効果的に変換できない場合は、0が返されます。
説明:
私たちは、環境のサイズは32ビット符号付き整数、[-231 231--1]の[値の範囲を記憶することができると仮定する。(-231)またはINT_MIN -値がこの範囲を超える場合、INT_MAX(1 231)を返します
例
のアイデア
- パイソン:数字はint型を取得します©
- C ++:文字は、デジタルC-'0「取得
の答えを - パイソン
方法1 正则表达式
def myAtoi(self, s: str) -> int:
return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), 2**31 - 1), -2**31)
方法2:
class Solution:
def myAtoi(self, s: str) -> int:
INT_MAX = 2**31-1
INT_MIN = -(2**31)
flag = 1
num=0
for i in range(len(s)):
if not s[i].isspace():
if s[i]=='-' or s[i]=='+':
if s[i]=='-':
flag = -1
#为'+'时,符号不变
i = i+1
while i<len(s) and s[i].isdigit():
num = num*10+int(s[i])
if num*flag < INT_MIN: return INT_MIN
if num*flag > INT_MAX: return INT_MAX
i = i+1
break
return num*flag
- C ++
class Solution {
public:
int myAtoi(string s) {
long num=0;
int flag = 1;
for (int i=0; i<s.size(); i++)
{
if (!isspace(s[i]))
{
if (s[i]=='+' || s[i]=='-')
flag = s[i++]=='-'?-1:1;
while (i<s.size() && isdigit(s[i]))
{
num = num*10+s[i++]-'0';
if (num*flag<INT_MIN) return INT_MIN;
if (num*flag>INT_MAX) return INT_MAX;
}
break;
}
}
return num*flag;
}
};