zoukankan      html  css  js  c++  java
  • [leetcode]N-Queens II

    一开始不明白为什么有这么一道几乎完全一样的,但把I的改一下超时了,所以要优化一下。经搜索,发现可以这样优化:使用col[i]表示第i行Q所在的列,那么,判断斜线是否满足就可以用abs(k-i)== abs(col[k]-j),注意这里k要小于i,因为后面的行没有放Q,而默认初始化时0列放Q,就会错误。

    public class Solution {
        private int ans;
        private boolean[] visited;
        private int[] col;
        public int totalNQueens(int n) {
            ans = 0;
            col = new int[n];
            visited = new boolean[n];
            sub(0);
            return ans;
        }
        
        private void sub(int i)
        {
            int n = col.length;
            if (i == n)
            {
                ans++;
            }
            else
            {
                for (int j = 0; j < n; j++)
                { 
                    if (!visited[j] && isValid(i, j))
                    {
                        col[i] = j;
                        visited[j] = true;
                        sub(i+1);
                        visited[j] = false;
                    } 
                }
            }
        }
        
        private boolean isValid(int i, int j)
        {
            // only need to validate column and 'X' direction
            for (int k = 0; k < i; k++)
            {
                if (Math.abs(k-i)== Math.abs(col[k]-j)) return false;
            }
            return true;
        }
    }
    

      

  • 相关阅读:
    jmeter beanshell 从文件中获取随机参数
    shell 备份mysql
    Centos7 搭建wordpress
    jmeter分布式测试
    centos 环境搭建jenkins服务
    VMVare 虚拟机使用桥接模式
    Gradle 打可执行jar包
    appium 报错
    corda
    android构建过程
  • 原文地址:https://www.cnblogs.com/lautsie/p/3349573.html
Copyright © 2011-2022 走看看