• 996. Number of Squareful Arrays


    Given an array A of non-negative integers, the array is squareful if for every pair of adjacent elements, their sum is a perfect square.

    Return the number of permutations of A that are squareful.  Two permutations A1 and A2 differ if and only if there is some index isuch that A1[i] != A2[i].

    Example 1:

    Input: [1,17,8]
    Output: 2
    Explanation: 
    [1,8,17] and [17,8,1] are the valid permutations.
    

    Example 2:

    Input: [2,2,2]
    Output: 1

    Note:

    1. 1 <= A.length <= 12
    2. 0 <= A[i] <= 1e9

    Approach #1: Math. [Java]

    class Solution {
        int ret = 0;
        Map<Integer, Integer> cntMap = new HashMap<>();
        Map<Integer, Set<Integer>> squareMap = new HashMap<>();
        
        public int numSquarefulPerms(int[] A) {
            for (int num : A) {
                if (!cntMap.containsKey(num)) {
                    cntMap.put(num, 1);
                    squareMap.put(num, new HashSet<Integer>());
                } else {
                    cntMap.put(num, cntMap.get(num) + 1);
                }
            }
            
            for (int num1 : cntMap.keySet()) {
                for (int num2 : cntMap.keySet()) {
                    double c = Math.sqrt(num1 + num2);
                    if (c == Math.floor(c)) {
                        squareMap.get(num1).add(num2);
                        squareMap.get(num2).add(num1);
                    }
                }
            }
            
            for (int key : cntMap.keySet()) {
                dfs(key, A.length - 1);
            }
            
            return ret;
        }
        
        public void dfs(int key, int left) {
            cntMap.put(key, cntMap.get(key)-1);
            if (left == 0) ret++;
            else {
                for (int next : squareMap.get(key)) {
                    if (cntMap.get(next) != 0) {
                        dfs(next, left - 1);
                    }
                }
            }
            cntMap.put(key, cntMap.get(key)+1);
        }
    }
    

      

    Reference:

    https://leetcode.com/problems/number-of-squareful-arrays/discuss/238562/C%2B%2BPython-Backtracking

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    【题解】【神奇校内POIN模拟赛】小凯的疑惑
    【题解】【CF670C】cinema
    11 Remove Duplicates from Sorted Array II
    10 3SumClosest
    7 Container With Most Water
    8 String to Integer (atoi)
    9 3Sum
    6 Palindrome Number
    5 Zigzag Conversion
    4 Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10940603.html
Copyright © 2020-2023  润新知