力扣做题记录——递归专题

leetcode 104. 二叉树的最大深度

 public int maxDepth(TreeNode root) {
      if(root==null)return 0;
      int leftDepth=maxDepth(root.left);
      int rightDepth=maxDepth(root.right);
      return Math.max(leftDepth,rightDepth)+1;
    }

leetcode 62. 不同路径

傻递归,超时

public int uniquePaths(int m, int n) {
        if(n==1||m==1)return 1;
        return uniquePaths(m-1,n)+uniquePaths(m,n-1);
    }

记忆化搜索优化

public int uniquePaths(int m, int n) {
       int [][] dp =new int[m][n];
       int i,j;
       for( i=0;i<m;i++){
           dp[i][0]=1;
       }
       for( j=0;j<n;j++){
           dp[0][j]=1;
       }
       for(i=1;i<m;i++){
           for(j=1;j<n;j++){
               dp[i][j]=dp[i-1][j]+dp[i][j-1];
           }
       }
       return dp[m-1][n-1];
    }

空间优化

public int uniquePaths(int m, int n) {
       int []dp=new int[n];
       Arrays.fill(dp,1);
       for(int i=1;i<m;i++){
           for(int j=1;j<n;j++){
               dp[j]+=dp[j-1];
           }
       }
       return dp[n-1];
 }

剑指 Offer 16. 数值的整数次方

栈溢出

class Solution {
    public double myPow(double x, int n) {
         if(n==1)return x;
         if(n==0)return 1;
         if(n<0)return 1/myPow(x,-n);
         return x*myPow(x,n-1);
    }
}
public double myPow(double x, int n) {
         if(n==1)return x;
         else if(n==0)return 1;
         else if(n<0)return 1/(x*myPow(x,-n-1));
         else if(n%2==1)return x*myPow(x,n-1);
         else return myPow(x*x,n/2);  
    }

4、leetcode 4. 寻找两个正序数组的中位数

public double findMedianSortedArrays(int[] nums1, int[] nums2) {
       int m=nums1.length;
       int n=nums2.length;
       double []merge=new double[m+n];
       int i=0,j=0,k=0;
       while(i<m&&j<n){
           merge[k++]=nums1[i]<=nums2[j]?nums1[i++]:nums2[j++];
       }
       while(i<m)merge[k++]=nums1[i++];
       while(j<n)merge[k++]=nums2[j++];
       double middle=(m+n)%2==0?(merge[(m+n)/2-1]+merge[(m+n)/2])/2:merge[(m+n)/2];
       return middle;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值