LeetCode52 N-Queens II
来源:互联网 发布:恢复出厂设置数据恢复 编辑:程序博客网 时间:2024/06/14 03:06
详细见:leetcode.com/problems/n-queens-ii
Java Solution: github
package leetcode;public class P052_NQueensII {public static void main(String[] args) {System.out.println(new Solution1().totalNQueens(8));}/* * 2 ms * 80.45% */static class Solution1 {int ans = 0;boolean[] col = null, rup = null, lup = null; public int totalNQueens(int n) { if (n < 1)return ans;col = new boolean[n];rup = new boolean[(n << 1) - 1];lup = new boolean[rup.length];search(0);return ans; } private void search(int index) {if (index == col.length) {ans ++;return;}for (int i = 0; i != col.length; i ++) {if (! col[i] && ! lup[index + i] && ! rup[col.length - 1 + index - i]) {col[i] = lup[index + i] = rup[col.length - 1 + index - i] = true;search(index + 1);col[i] = lup[index + i] = rup[col.length - 1 + index - i] = false;}}}}}
C Solution: github
/* url: leetcode.com/problems/n-queens-ii/ AC 6ms 0.00% AC 3ms 7.14%*/#include <stdio.h>#include <stdlib.h>int valid(char** save, int i, int j, int n) { int k = 0, ii = 0, jj = 0; for (k = 0; k < n; k ++) { if (k != i && save[k][j] == 'Q') return 0; if (k != j && save[i][k] == 'Q') return 0; } ii = i + 1; jj = j + 1; while (ii < n && jj < n) { if (save[ii][jj] != 'Q') { ii ++; jj ++; } else return 0; } ii = i - 1; jj = j - 1; while (ii > -1 && jj > -1) { if (save[ii][jj] != 'Q') { ii --; jj --; } else return 0; } ii = i + 1; jj = j - 1; while (ii < n && jj > -1) { if (save[ii][jj] != 'Q') { ii ++; jj --; } else return 0; } ii = i - 1; jj = j + 1; while (ii > -1 && jj < n) { if (save[ii][jj] != 'Q') { ii --; jj ++; } else return 0; } return 1;}void solve(char** save, int row, int n, int* ans) { int i = 0, j = 0, col = 0; if (row == n) { (*ans) ++; return; } for (col = 0; col < n; col ++) { if (valid(save, row, col, n)) { save[row][col] = 'Q'; solve(save, row+1, n, ans); save[row][col] = '.'; } }}int totalNQueens(int n) { char** save = (char**) malloc(sizeof(char*) * n); char* save_row = NULL; int i = 0, j = 0, ans = 0; for (i = 0; i < n; i ++) { save_row = (char*) malloc(sizeof(char) * (n+1)); for (j = 0; j < n; j ++) save_row[j] = '.'; save_row[n] = '\0'; save[i] = save_row; } solve(save, 0, n, &ans); return ans;}void solve2(int row, int n, int* ans, int* col_sign, int* lup_sign, int* rup_sign) { int col = 0; if (row == n) { (*ans) ++; return; } for (col = 0; col < n; col ++) { if (!col_sign[col] && !lup_sign[row + col] && !rup_sign[col - row + n - 1]) { col_sign[col] = lup_sign[row + col] = rup_sign[col - row + n - 1] = 1; solve2(row+1, n, ans, col_sign, lup_sign, rup_sign); col_sign[col] = lup_sign[row + col] = rup_sign[col - row + n - 1] = 0; } }}int totalNQueens2(int n) { int i = 0, j = 0, ans = 0; int *col_sign = NULL, *lup_sign = NULL, *rup_sign = NULL; col_sign = (int*) malloc(sizeof(int) * n); lup_sign = (int*) malloc(sizeof(int) * (2 * n - 1)); rup_sign = (int*) malloc(sizeof(int) * (2 * n - 1)); for (i = 0; i < n; i ++) col_sign[i] = 0; for (i = 0; i < 2 * n - 1; i ++) lup_sign[i] = 0; for (i = 0; i < 2 * n - 1; i ++) rup_sign[i] = 0; solve2(0, n, &ans, col_sign, lup_sign, rup_sign); return ans;}int main() { printf("answer is %d\r\n", totalNQueens2(14));}
Python Solution: github
#coding=utf-8''' url: leetcode.com/problems/n-queens-ii @author: zxwtry @email: zxwtry@qq.com @date: 2017年4月10日 @details: Solution: 66ms 84.62%'''class Solution(object): def search(self, a, c, l, r, i, n): if i == n: a[0] += 1 return for j in range(n): if not c[j] and not l[j+i] and not r[j-i+n-1]: c[j]=l[j+i]=r[j-i+n-1]=True self.search(a, c, l, r, i+1, n) c[j]=l[j+i]=r[j-i+n-1]=False def totalNQueens(self, n): """ :type n: int :rtype: List[List[str]] """ a,c,l,r=[0],[False]*n,[False]*(2*n-1),[False]*(2*n-1) self.search(a, c, l, r, 0, n) return a[0] if __name__ == "__main__": print(Solution().totalNQueens(5))
0 0
- LeetCode52:N-Queens II
- Leetcode52 N-Queens II
- leetcode52 N-Queens II
- Leetcode52: N-Queens II
- LeetCode52 N-Queens II
- LeetCode52. N-Queens II
- LeetCode52——N-Queens II
- N-Queens && N-Queens II
- LeetCode: N-Queens II
- LeetCode : N-Queens II
- [Leetcode] N-Queens II
- N-Queens II
- 【leetcode】N-Queens II
- LeetCode: N Queens II
- [LeetCode]N-Queens II
- N-Queens II
- N-Queens II
- LeetCode - N-Queens II
- nyoj 677 碟战 (dfs)
- 换工作过程的总结
- 使用位运算实现判断一个数是否是2的n次方,实现不需要中间变量进行两个变量值的交换
- 微信扫码支付模式二
- 即拿即用-一个快速上手的网络请求框架(Retrofit+okHttp3)
- LeetCode52 N-Queens II
- 背景图片占满整个屏幕
- L1-025. 正整数A+B java
- 定时器设置与取消
- Centos安装数据库
- 紫书章五习题九 Bug Hunt UVA 1596
- Myeclipse 2016 SVN插件突然缺失的解决办法
- servlet之初认识
- 堆栈