Algorthim:
N皇后:
思路:
step: 先放第一排,有n种放置的可能性
然后放第二排,放第二排的时候需要检查是否可以放置,如果不可以放置,则continue
func solveNQueens(n int) [][]string {
bd := make([][]string,n)
for i := range bd {
bd[i] = make([]string,n)
for j := range bd[i] {
bd[i][j] = "."
}
}
res := [][]string{}
helper(0,bd,&res,n)
return res
}
func helper(start int,bd [][]string,res *[][]string,n int) {
if start == n {
temp := make([]string,len(bd))
for i := 0;i < n;i++ {
temp[i] = strings.Join(bd[i],"")
}
*res = append(*res,temp)
return
}
for i := 0;i < n;i ++ {
if isValid(start,i,n,bd) {
bd[start][i] = "Q"
helper(start + 1,bd,res,n)
bd[start][i] = "."
}
}
}
/*
step: 先放第一排,有n种放置的可能性
然后放第二排,放第二排的时候需要检查是否可以放置,如果不可以放置,则continue
*/
func isValid(row, col,n int, chessboard [][]string) bool {
for i := 0; i < row; i++ {
if chessboard[i][col] == "Q" {
return false
}
}
for i, j := row-1, col-1; i >= 0 && j >= 0; i, j = i-1, j-1 {
if chessboard[i][j] == "Q" {
return false
}
}
for i, j := row-1, col+1; i >= 0 && j < n; i, j = i-1, j+1 {
if chessboard[i][j] == "Q" {
return false
}
}
return true
}
java 单元测试:
Powermock mock 静态方法的时候我遇到的问题:
not prepared for test 导入的test包不支持powermock
import org.junit.jupiter.api.Test; // 这个Test包不支持powerMock
需要修改为 import org.junit.Test;
然后后面有遇到 NoSuchMethodError,版本不兼容导致的,替换成了
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
其他
读到如何做成一件事,里面有些文字和想法是有共鸣的:
做成一件事,我认为最重要的是,这些事都是自己认为值得做,也发自内心的认为这些事情原本就该是这个样子的。
一件事情,有了信念才会坚持,有了渴望才能不放弃。一件事情是别人安排你做,还是我们发自内心的认为值得做,要做,最终得到的结果可能是完全不一样的。也正是这样的渴望与信念,才让我们在每个看似可以放弃的地方再坚持那么一下下,才让我们可以绞尽脑汁的寻找一切可以借助的力量。最终,凭借着那一丝丝光亮,一步步朝着事情应有的结局前行。
参考资料:
Java单元测试技巧之PowerMock
Java单元测试实战
LLT补充时遇到的困难与解决办法
如何解决NoSuchMethodError