2020_12_16 LeetCode刷题
今天刷题三道,第一题是每日一题,之后两题是关于树,三道题目难度都是简单,目前想法按照难度顺序写,并且每道题目按照十五分钟的限制,如果超出时间没有完成,就查看题解,第二天再继续写。
290_单词规律
普通模拟,需要首先找出所有的单词并进行存放,之后按照模式串的形式,对单词串进行比对,查看是否符合条件。注意一点,两者的长度要相同,长度不同也算匹配失败。
class Solution {
public:
bool wordPattern(string pattern, string s) {
vector<string> words;
bool flag = true;
int len1 = s.length();
int len2 = pattern.length();
int num = 0;
for(int i = 0;i < len1; i++) {
string temp;
while(s[i] != ' ' && i < len1) {
temp = temp + s[i];
i++;
}
words.push_back(temp);
num += 1;
}
if(num == len2) {
for(int i = 0; i < len2 ; i++) {
for(int j = i + 1;j < len2; j++) {
if(pattern[i] == pattern[j]) {
if(words[i] == words[j])
continue;
else {
flag = false;
break;
}
} else {
if(words[i] != words[j])
continue;
else {
flag = false;
break;
}
}
}
if(!flag)
break;
}
} else
flag = false;
return flag;
}
};
108_将有序数组转换为二叉搜索树
递归回溯。一般简单的树形数据结构题目都是递归求解,这里今天没有完成,是查看题解完成的,明天继续复习。
/**
* 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* sortedArrayToBST(vector<int>& nums) {
int len1 = nums.size() - 1;
return ArrayToBST(0,len1,nums);
}
TreeNode* ArrayToBST(int s,int e,vector<int>& nums) {
if(s > e) {
return NULL;
}
TreeNode* ans = new TreeNode(nums[(s+e)/2]);
ans->left = ArrayToBST(s,(s+e)/2-1,nums);
ans->right = ArrayToBST((s+e)/2+1,e,nums);
return ans;
}
};
110_平衡二叉树
想到运用回溯法对于长度进行计算,但是在计算过程中,发现计算长度需要一个函数,然后返回匹配不相同需要再声明一个函数,陷入了迷茫,就十分的懵,然后卡壳了。也是查看题解完成,明天接着复习。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isBalanced(TreeNode* root) {
if(root == nullptr)
return true;
else {
return abs(heightTree(root->left) - heightTree(root->right)) <= 1 && isBalanced(root->left) && isBalanced(root->right);
}
}
int heightTree(TreeNode* root) {
if(root == nullptr)
return 0;
else {
return max(heightTree(root->left),heightTree(root->right)) + 1;
}
}
};