2021-02-05:给定一个数N,想象只由0和1两种字符,组成的所有长度为N的字符串。如果某个字符串,任何0字符的左边都有1紧挨着,认为这个字符串达标。请问有多少达标的字符串?

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编写,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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)

posted @   福大大架构师每日一题  阅读(835)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示