2020_12_17 LeetCode刷题

2020_12_17 LeetCode刷题

今天的三道题完成的比较顺,两道题目在15min内完成,之后一道题目在稍微调试之后也顺利完成。

205. 同构字符串

普通模拟题。思路和模式字符串匹配一样,先判定两个字符串的长度是否相等,之后运用映射对于映射的字符串进行存储,同时每两个字符的映射是一一对应的,不能是一对多。

class Solution {
public:
    bool isIsomorphic(string s, string t) {
        int len1 = s.length();
        int len2 = t.length();
        bool flag = true;
        map<char,char> p;
        set<char> q;
        set<char> q1;
        if(len1 == len2) {
            for(int i = 0 ; i < len1 ; i++) {
                if(!q.count(s[i])) {
                    if(!q1.count(t[i])) {
                        q.insert(s[i]);
                        p[s[i]] = t[i];
                        q1.insert(t[i]);
                    } else {
                        flag = false;
                        break;
                    }
                } else {
                    if(p[s[i]] == t[i])
                        continue;
                    else {
                        flag = false;
                        break;
                    }
                }
            }
        } else
            flag = false;
        return flag;
    }
};

226. 翻转二叉树

递归回溯题。递归函数在是否传回参数上有所考虑,最终确定不传回参数,每次对于左右子树的指针指向进行交换,之后递进到下一层,继续交换,直到为空。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == nullptr) {
            return root;
        }
        ReseTree(root);
        return root;
    }
    void ReseTree(TreeNode* root) {
        if(root == nullptr)
            return;
        TreeNode* templeft = root->left;
        TreeNode* tempright = root->right;
        root->left = tempright;
        root->right = templeft;
        ReseTree(root->left);
        ReseTree(root->right);
    }
};

228. 汇总区间

普通模拟题。注意判定过程中的数组越界的问题,以及to_string函数对于数字的转换,负数转换要进行特殊判定。同时对于INT_MAX进行转换会带负号,需要对于多余的负号进行删除,保证结果的正确性。

class Solution {
public:
    vector<string> summaryRanges(vector<int>& nums) {
        vector<string> p;
        int len1 = nums.size();
        for(int i = 0; i < len1; i++){
            int start = i, end1 = i;
            while(i + 1 < len1 && (nums[i] + 1) == nums[i + 1]) {
                i += 1;
            }
            end1 = i;
            if(start == end1) {
                string ans = numtostring(nums[start]);
                p.push_back(ans);
            } else {
                string snum = numtostring(nums[start]);
                string ennum = numtostring(nums[end1]);
                string ans = snum + "->" + ennum;
                int st1 = 0;
                while(st1 < ans.length() && ans[st1] == '-')
                    st1 += 1;
                if(st1 > 1)
                    ans.erase(0,st1 - 1);
                p.push_back(ans);
            }
        }
        return p;
    }
    string numtostring(int num) {
        string ans = "";
        if(num > 0)
            ans = to_string(num);
        if(num == 0)
            ans = "0";
        if(num < 0)
            ans = "-" + to_string(abs(num));
        return ans;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值