public class Solution {
public int MyAtoi(string str) {
var arrNum = "0123456789".ToList();
var arrSymbol = "-".ToList();
if (string.IsNullOrWhiteSpace(str))
{
return 0;
}
else
{
str = str.Trim();
}
bool isFirstAddSymbol = (str[0] == '+');
if (isFirstAddSymbol)
{
str = str.Substring(1);
}
if (string.IsNullOrWhiteSpace(str))
{
return 0;
}
bool isFirstNum = (arrNum.IndexOf(str[0]) != -1);
bool isFirstSymbol = (arrSymbol.IndexOf(str[0]) != -1);
if ((isFirstAddSymbol && isFirstSymbol) ||
(!isFirstNum && !isFirstSymbol) ||
(isFirstSymbol && str.All(x => arrNum.IndexOf(x) == -1)) ||
(isFirstSymbol && str.Length > 1 && (arrNum.IndexOf(str[1]) == -1)))
{
return 0;
}
string numString = string.Empty;
str = isFirstSymbol ? str.Substring(1) : str;
for (int i = 0; i < str.Length; i++)
{
bool isNum = (arrNum.IndexOf(str[i]) != -1);
if (!isNum)
{
break;
}
if (numString == "0")
{
numString = str[i].ToString();
}
else
{
numString += str[i].ToString();
}
}
int maxValueLength = int.MaxValue.ToString().Length;
long ans = int.MaxValue;
bool isMoreMax = (numString.Length > maxValueLength) || (long.Parse(numString) > int.MaxValue);
if (!isMoreMax)
{
ans = long.Parse(numString);
}
if (isFirstSymbol && isMoreMax)
{
ans += 1;
}
return Convert.ToInt32(isFirstSymbol ? -ans : ans);
}
}