Leetcode823: 인자 이차수 문제

2232 단어

문제 설명


하나의 그룹을 지정합니다. 그룹의 수는 중복되지 않고 모두 1보다 큽니다.수조의 수를 사용하여 두 갈래 나무를 구축하도록 요구합니다. 모든 숫자는 중복 사용될 수 있습니다. 잎 노드를 제외하고 각 노드의 값은 그 하위 노드의 곱셈과 같습니다. 두 갈래 나무를 구축하는 수량을 구하면 되돌아오는 결과mod10*9+7
Example 1:
Input: A = [2, 4] Output: 3 Explanation: We can make these trees: [2], [4], [4, 2, 2]
Example 2: Input: A = [2, 4, 5, 10] Output: 7 Explanation: We can make these trees: [2], [4], [5], [10], [4, 2, 2], [10, 2, 5], [10, 5, 2] .
원본 링크:https://leetcode.com/problems/binary-trees-with-factors/

분석


조건에 부합되는 두 갈래 나무는 두 가지 상황으로 나뉘는데 하나는 하나의 절점으로 구성된 두 갈래 나무로 하위 노드가 없고 모두 A.length의 상황이 있다.또 다른 상황은 여러 노드로 구성된 두 갈래 나무로 노드의 값은children 노드 값의 곱셈입니다.첫 번째 상황은 매우 간단해서 토론할 필요가 없다. 두 번째 상황은 약간 복잡하지만, 우리는 다음과 같이 생각할 수 있다.
만약에 a=b*c 등식이 성립된다면 a가 아버지 노드로 구성된 두 갈래 나무의 수량=b가 아버지 노드로 구성된 두 갈래 나무*가 아버지 노드로 구성된 두 갈래 나무*2(좌우 노드 교환 위치).
따라서 원소 a가 루트에 대응하는 두 갈래 나무의 수량에 대해 우리는 모든 b와 c가 대응하는 두 갈래 나무의 수량(b

실현

public int umFactoredBinaryTrees(int[] A){
        int mod = 1000000007;
        Arrays.sort(A);
        //key root  ,value 
        Map map = new HashMap();
        Long result = 0;
        for(int m = 0; i < A.length; m++){
               long cnt = 1; // 
               int a = A[m];
               for(Integer b : map.keySet()){
                       if(a % b == 0 && map.containsKey(a/b)){
                               cnt += map.get(b) * map.get(a/b);
                       }
               }
               map.put(num, cnt);
               result = (result + cnt) % mod;
        }
        return (int) result;
}

공간 복잡도 O(n), 시간 복잡도 O(n^2)

좋은 웹페이지 즐겨찾기