zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    优酷视频下载,优酷真实地址解析
    vim配置入门,到豪华版vim配置
    python字典实现三级菜单
    python 购物车
    来到博客园的第一天
    python urllib模块使用详解
    ubutun升级命令
    SQL注入笔记
    Ajax_showHint() 函数
    轮播图中遇到的问题
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10940603.html
Copyright © 2011-2022 走看看