求满足条件的长度为N的字符串的个数(斐波那契数列)
来源:互联网 发布:卡西欧授权的淘宝网店 编辑:程序博客网 时间:2024/06/05 21:06
今天做到了一道题目,初看时愣了一下,回过头在做的时候忽然发现其实是斐波那契数列。
原题大概是这样的:
条件1:字符串只包含‘0’或 ‘1’;
条件2:字符串只能以‘1’开始;
条件3:字符串不能够包含‘00’的组合;
问:长度为N的字符串的合法的组合到底有几种可能性?
解:
这里先记录一下自己的思考过程:
字符串起始只能是‘1’,所以实际上就是问(长度为N-1的字符串全部的组合数-包含‘00’的组合数)的大小;
考虑‘00’组合的个数进行组合,感觉之后处理会比较麻烦,就断了这个想法。
我们先写出长度为N的字符串的可能的组合数量:
len = 1(1)output: 1len = 2(10, 11)output: 2len = 3(101, 110, 111)output: 3len = 4(1010, 1011, 1101, 1110, 1111)output: 5
其实写到这里,我们大致已经发现了规律:F(N) = F(N - 1) + F(N - 2)
证明:
假设,长度为N所有合法的字符串中,末尾为‘0’的字符串的个数为x,末尾为‘1’的字符串的个数为y;
F(N) = x + y;
则,此时长度为N + 1的所有合法的字符串中,末尾为‘0’的字符串只能从长度为N的末尾为‘1’的字符串变化而来才是合法的,所以长度为N + 1的合法字符串中末尾为‘0’的字符串的个数为y;末尾为1的字符串个数为x + y;
F(N + 1) = x + 2 * y;
此时长度为N + 2的所有合法的字符串中,末尾为‘0’的字符串只能从长度为N + 1的末尾为‘1’的字符串变化而来才是合法的,所以长度为N + 2的合法字符串中末尾为‘0’的字符串的个数为 x + y;末尾为1的字符串个数为x + 2 * y;
F(N + 2) = 2 * x + 3 * y;
在数值上可以得到:F(N + 2) = F(N + 1) + F(N)
证毕。
- 求满足条件的长度为N的字符串的个数(斐波那契数列)
- C#求一个长度为100个数的斐波那契数列
- 算法:使用递归打印长度为N的斐波那契数列
- 求解斐波那契数列的第n个数
- 扩展的斐波那契数列:求兔子个数
- 【HDU3530】【单调队列(双)】Subsequence 【长度为n的数列,求最长子区间的长度,使得区间的最大值与最小值的差满足一个范围】
- 动态规划--求满足条件的数列
- 满足条件的第n个数
- 08查找满足条件的n个数
- 使用递归算法求1,1,2,3,5...斐波那契数列第N个数的值
- 满足条件的n
- 斐波那契数列 求第n个数、前n个数之和
- 【Manthan, Codefest 16D】【暴力+去重or特判】Fibonacci-ish n个数组成最长斐波那契数列的长度
- 求斐波那契数列的第N个数的值
- 求第n个数的斐波那数
- 第12周项目3返回斐波那契数列的第n个数
- 斐波那契Fibonacci数列第n个数的快速求法
- 第五周-raptor 输出斐波那契数列的前n个数
- servlet监听,异步,线程练习
- 慕课网首页仿写—焦点图
- Opencv中SVM样本训练、归类流程及实现
- 欢迎使用CSDN-markdown编辑器
- 第十周项目2——二叉树的便利的递归算法
- 求满足条件的长度为N的字符串的个数(斐波那契数列)
- uva10837 A Research Problem
- mybatis 缓存getSqlSession().selectList(getMapperNamesapce() + ".getList", e);
- 整数分划问题和钱的组合问题(动态规划)
- Volley(三) 三级缓存策略
- 个人模板库
- 设置 UILabel 距离边框的距离
- Win10手动安装配置MySQL
- HDU 1867 A + B for you again