遞歸的基本思想是把規模大的問題轉化爲規模小的相似的子問題來解決。在函數實現時,因爲解決大問題的方法和解決小問題的方法往往是同一個方法,所以就產生了函數調用它自身的情況。另外這個解決問題的函數必須有明顯的結束條件,這樣就不會產生無限遞歸的情況了
遞歸的條件:1.能將大問題分解爲相同的小問題
2.能在最後解決最小的問題,然後逐層返回
遞歸的基本思想是把規模大的問題轉化爲規模小的相似的子問題來解決。在函數實現時,因爲解決大問題的方法和解決小問題的方法往往是同一個方法,所以就產生了函數調用它自身的情況。另外這個解決問題的函數必須有明顯的結束條件,這樣就不會產生無限遞歸的情況了
遞歸的條件:1.能將大問題分解爲相同的小問題
2.能在最後解決最小的問題,然後逐層返回
/** * 棧的壓入,彈出序列 * 設置一個輔助棧,依次把彈出序列壓入輔助棧,如果輔助棧頂元素和原始棧棧頂元素相等,則都彈出 * 最後棧爲空就說明彈出序列是棧的壓入序列 * *
List<Integer> list = new ArrayList<>(); /** * 二叉樹中和爲某一值的路徑 * <p> * 前序遍歷二叉樹,list保存節點,遇到沒有孩子節點並且
/** * 調整數值順序使奇數位於偶數前面 * * @param arr */ public void reorderOddEven(int[] arr) { if
/** * 正則表達式匹配 * <p> * .表示任意一個字符 * *表示它前面的字符可以出現任意次 * * @param s * @param patter
/** * 刪除鏈表的節點 * 給定單項鍊表的頭指針和一個節點指針,定義一個函數在O(1)的時間內刪除該節點 * * @param node * @return */
/** * 複雜鏈表的複製 * * @param root * @return */ public ComplexListNode clone(ComplexListNo
/** * 數字序列中某一位的數字 * * @param index * @return */ public int digitAtIndex(int index) {
/** * 最小的k個數 * <p> * 利用堆 * * @param arr * @param k * @return */ public
/** * 二叉搜索樹與雙向鏈表 * * @param root * @return */ public BinaryTreeNode convert(BinaryTr
/** * 在排序數組中查找數字 * 統計一個數字在排序數組中出現的次數 * * @param arr * @return */ public int getN
/** * 數組中超過一半的數字 * <p> * 遇到相等的數count加1,不相等就減1,如果存在一個數在數組中佔一半,則遍歷完當前值必定是這個數 * * @param arr
/** * 連續子數組的最大和 * * @param arr * @return */ public int findGreatestSumOfSubArray(int[
int res = 0; /** * 數組中的逆序對 * <p> * 歸併排序求逆序對 * * @param arr * @return */