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