2.5 字符串-0左边必有1的二进制字符数量

给定一个整数N,N代表全部由0或者1字符组成的二进制字符串的长度,求该长度下,所有满足0的左边必有1的字符串的数量

分析:
1)暴力方法时间复杂度为 2^n * n
2)优化算法:先分析题意,要求0的左边必有1,再次涉及到子串问题,且需连续,以动态规划来解决,按照以往的思路不难得出,dp[i]的值代表着,以 ,重新分析,在最大公共子串中,求最大公共子串,是从左到右遍历,i位置的值取决于i-1,且遍历到i时,是以i结尾。本题中, 依然是先确定字符串左边,再确定右边的动态,但相反的是dp值代表的却是在左边字符串的值定下后,右边能取多少数量。
3)以当前i为例子,当左边i-1取为1时,我i才能随意取1或者0,而我右边有多少种排列组合合适,我就都加进来,而左边是0的话,我i就只能取1,所以规定dp[i]的意义为 当i-1为1时,i位置包括往后的字符串能有多少种取法。(之所以这样取值,是因为只需要考虑一种情况,i-1=0时的取法值很显然已经在i-2时加进去了)

代码实现:

//0左边必有1的二进制字符串数量
    public int get0_Left_1(int n){

        if(n < 1){
            return 0;
        }
        return 00;
    }

    public int process(int i, int n){
        
        //如果i在倒数第二位了,能取俩 ,1 0 , 11
        if(i == n-1){
            return 2;
        }
        if(i == n){
            return 1;
        }
        
        //这里为什么返回i+1位置的值加上i+2位置的值??
        /**
         * 解释:当i取1的时候, i+1位置的值可以任意取,取0或1都行 所以i+1位置的取法数量代表i取i的取法数量
         * 当i取0的时候,i+1 只能取1,否则i和i+1的排列 成了 00 不满足0左边必为1,那i+1就只能取1的话
         * i+1为1时有多少种取法,就取决于 i+2任意取的取法数量了,还是上面的思路,i+1取1了
         * i+2就可以任意取了
         */
        return process(i+1,n) + process(i + 2, n);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值