2021-02-05:給定一個數N,想象只由0和1兩種字符,組成的所有長度為N的字符串。如果某個字符串,任何0字符的左邊都有1緊挨着,認為這個字符串達標。請問有多少達標的字符串?
福哥答案2021-02-05:
舉例:
N=6
[1 0 1 0 1 0]
[1 0 1 0 1 1]
[1 0 1 1 0 1]
[1 0 1 1 1 0]
[1 0 1 1 1 1]
[1 1 0 1 0 1]
[1 1 0 1 1 0]
[1 1 0 1 1 1]
[1 1 1 0 1 0]
[1 1 1 0 1 1]
[1 1 1 1 0 1]
[1 1 1 1 1 0]
[1 1 1 1 1 1]
總共13種。
這道題是斐波那契數列。代碼不用斐波那契數列,用遞歸最直觀。
代碼用golang編寫,代碼如下:
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
ret := ff(i)
fmt.Println(i, ret)
}
}
//一個一個試,最直觀思維
func ff(n int) int {
ansval := 0
ans := &ansval
arr := make([]int, n)
//第0個位置,肯定是1
arr[0] = 1
process(arr, 1, ans)
return *ans
}
//遞歸
func process(arr []int, start int, ans *int) {
if start == len(arr) {
*ans++
return
}
if arr[start-1] == 1 {
arr[start] = 0
process(arr, start+1, ans)
}
arr[start] = 1
process(arr, start+1, ans)
}
代碼結果如下:

[左神java代碼](https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class26/Code02_FibonacciProblem.java)
[評論](https://user.qzone.qq.com/3182319461/blog/1612479635)
