1.leetcode4-二维数组
vector创建二维数组并传参:
//定义:
vector<vector<int>> matrix ={
{1, 4, 7, 11, 15},
{2, 5, 8, 12, 19},
{3, 6, 9, 16, 22},
{10, 13, 14, 17, 24},
{18, 21, 23, 26, 30}
};
//传参
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int i = matrix.size() - 1, j = 0;
while(i >= 0 && j < matrix[0].size())
{
if(matrix[i][j] > target) i--;
else if(matrix[i][j] < target) j++;
else return true;
}
return false;
}
};
// matrix[0].size()获取二维数组列数
2.leetcode-5:替换空格:
在c++种,string字符串可以直接修改单个字符,比如:
string s ="hello";
s[1]='a';
string的简单操作:
获取字符串长度:
string s ="string";
int len = s.size();
遍历字符串:
for(char c:s){
if(c==' ') count++;
}
重新修改字符串长度:
s.resize(len+count*2);
3.leetcode-6:从尾到头打印链表
基础:
节点定义:
struct ListNode {
int val; //定义val变量值,存储节点值
struct ListNode *next; //定义next指针,指向下一个节点,维持节点连接
}
- 在节点ListNode定义中,定义为节点为结构变量。
- 节点存储了两个变量:value 和 next。value 是这个节点的值,next 是指向下一节点的指针,当 next 为空指针时,这个节点是链表的最后一个节点。
- 注意注意val只代表当前指针的值,比如p->val表示p指针的指向的值;而p->next表示链表下一个节点,也是一个指针。
- 构造函数包含两个参数 _value 和 _next ,分别用来给节点赋值和指定下一节点
4.leetcode-7:二叉树
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根
递归调用:
TreeNode* find_par_build(vector<int>& preorder, vector<int>& norder, int pre_root, int in_left_bound, int in_right_bound)
{
if(in_left_bound > in_right_bound) //子树中序遍历为空,说明已经越过叶子节点,此时返回 null
return NULL;
TreeNode* root = new TreeNode(preorder[pre_root]); //在前序序列中找到根节点
int in_root = in_map[preorder[pre_root]]; //定位根节点在中序序列中的位置,此时in_root左边是左子树,右边是右子树
//找左子树的根:
root->left = find_par_build(preorder, norder, pre_root + 1, in_left_bound, in_root -1);
//左子树在前序中的根节点位于:pre_root+1; 左子树在中序中的边界:[in_left_bound,in_root-1]
//找右子树的根
root->right = find_par_build(preorder, norder, pre_root + (in_root - in_left_bound + 1), in_root + 1, in_right_bound);
// 右子树在前序中的根节点位于:根节点+(左子树长度+1);右子树在中序中的边界:[in_root+1,in_right_bound]
return root;
}
};