爬楼梯(70)
根据题目我们可以简单的写出爬前几阶楼梯的方法,
当n=1时, f(1) =1
当n=2时, f(2) =2
当n=3时, f(3) =3
当n=4时, f(4) =5
…
我们可以推出1个公式
f(n) = f(n-1) + f(n-2);
接下来实现我们就可以定义一个数组来记录之前台阶走过的方式
实现思路及代码
class Solution {
public int climbStairs(int n) {
//定义1个数组
int[] dp = new int[n + 1];
dp[0] = 1;
//当只有1节台阶时
dp[1] = 1;
//从2节台阶开始计算
for (int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
对称二叉树(101)
这个题目理解起来十分简单,就是以根为对称轴来判断根的左右两边是否对称,关于二叉树的题大部分都需要用到递归,因此我们可以先从简单的开始判断
当根节点为null时,我们就直接返回true就可以了,
接着当只有根节点(root)时,也是符合题意的返回true。
当左子树和右子树都有值且值相等时符合题意,因此我们反向思考当只存在左子树或者存在右子树或者左子树和右子树都存在但他们的值不相等,这时我们就返回false。
最后如果都不符合就开始递归
实现思路及代码
class Solution {
public boolean isSymmetric(TreeNode root) {
// 如果该树是null的,就直接返回null
if(root == null){
return true;
}
return compareNext(root.left, root.right);
}
public boolean compareNext(TreeNode node1,TreeNode node2){
// 表示根节点下的左右节点都为null
if(node1 == null && node2 == null){
return true;
}
//表示根节点下要么左节点存在,要么右节点存在,要么左右节点的值不一样
if(node1 == null || node2 == null || node1.val != node2.val){
return false;
}
//要是都不满足,继续判断接下来的节点(递归调用)
return compareNext(node1.left, node2.right) && compareNext(node1.right, node2.left);
}
}