欢迎光临散文网 会员登陆 & 注册

看雪Unicorn高级逆向与反混淆

2022-10-05 22:50 作者:血霁玫瑰与樱花  | 我要投稿

不同的二叉搜索树

public class BinarySearchTree {    // f(n) n个节点二叉搜索树    // g(i) i为根节点,n个节点的二叉搜索树    //      左子树一定有 i - 1 个元素 => 左子树有 f(i-1) 种情况    //      右子树一定有 n - i 个元素 => 右子树有 f(n-i) 中情况    // f(n) = g(1) + g(2) + g(3) + ... + g(n-1) + g(n)    //      = f(0) * f(n-1) + f(1) * f(n-2) + f(2) * f(n-3) + ... + f(n-2) * f(1) + f(n-1) * f(0)    // f(3) = g(1) + g(2) + g(3)    // g(1) 左子树一定有0个元素,右子树一定有2个元素    // g(2) 左子树一定有1个元素,右子树一定有1个元素    // g(3) 左子树一定有2个元素,右子树一定有0个元素    public static int recursion(int n) {        if (n == 0) {            return 1;        }        if (n == 1 || n == 2) {            return n;        }        int result = 0;        for (int i = 0; i < n; i++) {            result += recursion(i) * recursion(n - i - 1);        }        return result;    }    public static int loop(int n) {        int[] result = new int[n + 1];        result[0] = 1;        if (n >= 0) {            result[1] = 1;        }        if (n >= 1) {            result[2] = 2;        }        for (int i = 3; i <= n; i++) {            // 计算第i个位置上的结果,第i个位置上的结果由前i-1个结果生成            int sum = 0;            for (int j = 0; j < i; j++) {                sum += result[j] * result[i - j - 1];            }            result[i] = sum;        }        return result[n];    }    public static void main(String[] args) {        System.out.println(loop(3));    }}


看雪Unicorn高级逆向与反混淆的评论 (共 条)

分享到微博请遵守国家法律