N-Queens II leetcode java


題目:

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

 

題解:

這道題跟NQueens的解法完全一樣(具體解法參照N QueensN Queens leetcode java),只不過要求的返回值不同了。。所以要記錄的result稍微改一下就好了。。。

因為涉及到遞歸,result傳進去引用類型(List,數組之類的)才能在層層遞歸中得以保存,所以這里使用一個長度為1的數組幫助計數。

當然,也可以使用一個全局變量來幫助計數。

代碼如下:

 

 1      public  int totalNQueens( int n) {  
 2          int[] res = {0};
 3          if(n<=0)
 4              return res[0];
 5             
 6          int [] columnVal =  new  int[n];
 7         
 8         DFS_helper(n,res,0,columnVal);
 9          return res[0];
10     }
11     
12      public  void DFS_helper( int nQueens,  int[] res,  int row,  int[] columnVal){
13          if(row == nQueens){
14             res[0] += 1;
15         } else{
16              for( int i = 0; i < nQueens; i++){
17                 columnVal[row] = i; // (row,columnVal[row)==>(row,i)
18                  
19                  if(isValid(row,columnVal))
20                     DFS_helper(nQueens, res, row+1, columnVal);
21             }
22         }
23     }
24     
25      public  boolean isValid( int row,  int [] columnVal){
26          for( int i = 0; i < row; i++){
27              if(columnVal[row] == columnVal[i]
28                ||Math.abs(columnVal[row]-columnVal[i]) == row-i)
29                 return  false;
30         }
31          return  true;

 使用全局變量來記錄結果的代碼是:

 1      int res;
 2      public  int totalNQueens( int n) { 
 3         res = 0;
 4          if(n<=0)
 5              return res;
 6             
 7          int [] columnVal =  new  int[n];
 8         
 9         DFS_helper(n,0,columnVal);
10          return res;
11     }
12     
13      public  void DFS_helper( int nQueens,  int row,  int[] columnVal){
14          if(row == nQueens){
15             res += 1;
16         } else{
17              for( int i = 0; i < nQueens; i++){
18                 columnVal[row] = i; // (row,columnVal[row)==>(row,i)
19                  
20                  if(isValid(row,columnVal))
21                     DFS_helper(nQueens, row+1, columnVal);
22             }
23         }
24     }
25     
26      public  boolean isValid( int row,  int [] columnVal){
27          for( int i = 0; i < row; i++){
28              if(columnVal[row] == columnVal[i]
29                ||Math.abs(columnVal[row]-columnVal[i]) == row-i)
30                 return  false;
31         }
32          return  true;
33     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM