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;
    }
};
posted @ 2020-04-27 21:23  凌丨云  阅读(128)  评论(0)    收藏  举报