遇到此問題的時候,如果運行遞歸要返回值的話,一般可以這樣寫 return 后面接遞歸的函數。
題目一:數字在排序數組中出現的次數
class Solution { public: int GetNumberOfK(vector<int> data ,int k) { int number=0; if(data.size()!=0){ int first=GetFirstk(data,k,0,data.size()-1); int last=GetLastk(data,k,0,data.size()-1); if(first>-1&&last>-1)number=last-first+1; } return number; } int GetFirstk(vector<int>&data,int k,int start,int end){ if(start>end)return -1; int mid=(start+end)>>1; if(data[mid]==k){ if((mid>0&&data[mid-1]!=k)||mid==0)return mid; else return GetFirstk(data,k,start,mid-1); } else{ if(data[mid]>k)return GetFirstk(data,k,start,mid-1); else return GetFirstk(data,k,mid+1,end); } } int GetLastk(vector<int>&data,int k,int start,int end){ if(start>end)return -1; int mid=(start+end)>>1; if(data[mid]==k){ if((mid<data.size()&&data[mid+1]!=k)||(mid==data.size()-1))return mid; else return GetLastk(data,k,mid+1,end); } else{ if(data[mid]<k)return GetLastk(data,k,mid+1,end); else return GetLastk(data,k,start,mid-1); } } };
題目二:二叉樹的深度
class Solution { public: int TreeDepth(TreeNode* pRoot) { if(!pRoot)return 0; return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1; } };