leetcode4.27
1、8字符串转换成数字
class Solution {
public:
int get_col(char c)
{
if (isspace(c))return 0;
else if (c == '+' || c == '-')return 1;
else if (isdigit(c))return 2;
else return 3;
}
int myAtoi(string str) {
unordered_map<string, vector<string>>table =
{
{"start",{"start","signed","number","end"}},
{"signed",{"end","end","number","end"}},
{"number",{"end","end","number","end"}},
{"end",{"end","end","end","end"}}
};
long long result = 0;
string state = "start";
int sign = 1;
for (auto elem:str)
{
state = table[state][get_col(elem)];
if (state == "signed")
{
if (elem == '-')sign = -1;
}
if (state == "number")
{
result = result * 10 + elem-'0';
if (sign == 1 && result >= INT_MAX)return INT_MAX;
if (sign == -1 && result * (-1) <= INT_MIN)return INT_MIN;
}
if (state == "end")return sign * result;
}
return sign*result;
}
};
2、33搜索旋转数组
class Solution {
public:
int search(vector<int>& nums, int target) {
if (nums.size() == 0)return -1;
int low = 0, high = nums.size() - 1;
int mid;
while (high - low > 1)
{
mid = (low + high) / 2;
if (nums[mid] > nums[low]&&nums[mid]>nums[high])
{
if (target < nums[mid])
{
if (target < nums[high])low = mid;
else if (target > nums[high])high = mid;
else return high;
}
else if (target > nums[mid])
{
low = mid;
}
else return mid;
}
else if(nums[mid] < nums[low] && nums[mid] < nums[high])
{
if (target > nums[mid])
{
if (target < nums[high])low = mid;
else if (target > nums[high])high = mid;
else return high;
}
else if (target<nums[mid])
{
high = mid;
}
else return mid;
}
else
{
if (target > nums[mid])low = mid;
else if (target < nums[mid])high = mid;
else return mid;
}
}
if (nums[low] == target)return low;
else if (nums[high] == target)return high;
else return -1;
}
};
如果你是对的,那就证明给他们看!

浙公网安备 33010602011771号