Day 6
第22题:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。(来自LeetCode)
1、首先可以使用暴力求解,n对括号里面总共有n*2个空间来存储括号;
可以将所有组合全部列举出来,然后筛选其中合法的括号。
2、当然也可以使用递归来生成合法的括号对;
先设置递归跳出条件,只有当左括号数left和右括号数right于n相等时,递归才结束;
递归里面需要实现的步骤为添加左括号和右括号;
只有当left<n时才可以加入左括号,只有right<left时才可以加入右括号;
这样递归可得到合法的括号组合。
第70题:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。(来自LeetCode)
1、当楼梯只有一阶时,你只能一次走1个台阶;
当楼梯有两阶时,你可以走1+1,或者直接走2个台阶;
当楼梯有三阶时,你可以走1+1+1,或者1+2,或者2+1,不难发现其实走三阶台阶时的方法其实就是走一阶和二阶方法的组合;
由此可得,当你需要走n阶台阶时,只需要在走n-1阶台阶后在走一阶,或者在走n-2阶台阶后再走两阶;可得f(n)=f(n-1)+f(n-2)这么多的方法;
我们可以从第n阶开始,算到第0阶的方法总数。
第104题:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。(来自LeetCode)
1、用递归的方式求出二叉树深度,先判断树是否为空,不为空则判断子树的最大深度,依次递归,返回左子树和右子树的深度最大值+1。