leetcode 刷题笔记

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;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值