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種。java

這道題是斐波那契數列。代碼不用斐波那契數列,用遞歸最直觀。git

代碼用golang編寫,代碼以下:github

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)
}

代碼結果以下:golang

圖片

左神java代碼
評論url

相關文章
相關標籤/搜索