LC52. N皇后Ⅱ

/**
 * @Classname Solution1
 * @Description
 * @Date 2020/1/14 10:28
 * @Author SonnSei
 */
public class Solution1 {
    boolean[] rowArray;
    boolean[] colArray;
    boolean[][] board;
    int n;
    int cnt;

    public int totalNQueens(int n) {
        this.n = n;
        cnt = 0;
        if (n < 1) return cnt;
        board = new boolean[n][n];
        rowArray = new boolean[n];
        colArray = new boolean[n];
        backTrack(0);
        return cnt;
    }


    private void backTrack(int x) {
        if (x >= n) {
            cnt++;
            return;
        }
        for (int i = 0; i < n; i++) {
            if (check(x, i)) {
                rowArray[x] = true;
                colArray[i] = true;
                board[x][i] = true;
                backTrack(x + 1);
                board[x][i] = false;
                rowArray[x] = false;
                colArray[i] = false;
            }
        }
    }

    private boolean check(int a, int b) {
        int x = a, y = b;
        if (rowArray[x]) return false;
        if (colArray[y]) return false;
        while (x >= 0 && y >= 0) {
            if (board[x][y]) return false;
            x--;
            y--;
        }
        x = a;
        y = b;
        while (x < n && y < n) {
            if (board[x][y]) return false;
            x++;
            y++;
        }

        x = a;
        y = b;
        while (x >= 0 && y < n) {
            if (board[x][y]) return false;
            x--;
            y++;
        }

        x = a;
        y = b;
        while (x < n && y >= 0) {
            if (board[x][y]) return false;
            x++;
            y--;
        }
        return true;
    }
}

map的强度:

  1. 正经map,key和value都可以任意值
  2. 数组map,key可以是单个字符,value是整数
  3. bitmap,key是范围连续的整数,value是boolean
发布了140 篇原创文章 · 获赞 2 · 访问量 1875

猜你喜欢

转载自blog.csdn.net/weixin_40602200/article/details/103968957