news 2026/4/27 16:38:28

【困难】0左边必有1的二进制字符串数量-Java:解法二

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【困难】0左边必有1的二进制字符串数量-Java:解法二

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言https://www.captainai.net/troubleshooter

package live.every.day.ProgrammingDesign.CodingInterviewGuide.String; /** * 0左边必有1的二进制字符串数量 * * 【题目】 * 给定一个整数N,求由"0"字符与"1"字符组成的长度为N的所有字符串中,满足"0"字符的左边必有"1"字符的字符串数量。 * * 【难度】 * 困难 * * 【解答】 * 先说一种最暴力的方法,就是检查每一个长度为N的二进制字符串,看有多少符合要求。一个长度为N的二进制字符串,检查是否符合要 * 求的时间复杂度为O(N),长度为N的二进制字符串数量为O(2^N),所以该方法整体的时间复杂度为O(2^NxN),本文不再详述。 * * O(2^N)的方法。假设第0位的字符为最高位字符,很明显,第0位的字符不能为'0'。假设p(i)表示0~i-1位置上的字符已经确定,这 * 一段符合要求且第i-1位置的字符为'1'时,如果穷举i~N-1位置上的所有情况会产生多少种符合要求的字符串。有了p(i)的定义,同 * 时知道不管N是多少,最高位的字符只能为'1',那么只要求出p(1)就是所有符合要求的字符串数量。 * * 那到底p(i)应该怎么求呢?根据p(i)的定义,在位置i-1的字符已经为'1'的情况下,位置i的宇符可以是'1',也可以是'0'。如果 * 位置i的字符是'1',那么穷举剩下字符的所有可能性,并且符合要求的字符串数量就是p(i+1)的值。如果位置i的字符是'0',那么 * 位置i+1的字符必须是'1',穷举剩下字符的所有可能性,符合要求的字符串数量就是p(i+1)的值。所以p(i)=p(i+1)+p(i+2)。 * p(N-1)表示除了最后位置的字符,前面的子串全符合要求,并且倒数第二个字符为'1',此时剩下的最后一个字符既可以是'1',也可 * 以是'0',所以p(N-1)=2。p(N)表示所有的字符串已经完全确定,并且符合要求,最后一个字符(N-1)为'1',所以,此时符合要求 * 的字符串数量就是0~N-1的全体,而不再有后续的可能性,所以p(N)=1。即p(i)如下: * i<N-1时,p(i)=p(i+1)+p(i+2) * i=N-1时,p(i)=2 * i=N时,p(i)=1 * 很明显,可以写成时间复杂度为O(2^N)的递归方法。具体请参看如下的getNum1方法。 * * 根据O(2^N)的方法,当N分别为1,2,3,4,5,6,7,8时,结算的结果为1,2,3,5,8,13,21,34。可以看出,这就是一个 * 形如斐波那契数列的结果,唯一的区别就是斐波那契数列的初始项为1,1。而这个数列的初始项为1,2。所以可很轻易地写出时间复 * 杂度为O(N),额外空间复杂度为O(1)的方法。 * 具体请参看如下代码中的getNum2方法。 * * @author Created by LiveEveryDay */ public class ZeroLeft1BinaryStrNum2 { public static int getNum2(int n) { if (n < 1) { return 0; } if (n == 1) { return 1; } int pre = 1; int cur = 1; int tmp = 0; for (int i = 2; i < n + 1; i++) { tmp = cur; cur += pre; pre = tmp; } return cur; } public static void main(String[] args) { int n = 8; System.out.printf("The count is: %d", getNum2(n)); } } // ------ Output ------ /* The count is: 34 */
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 16:36:21

妻子天天就是不听劝,每天买很多垃圾零食给自己吃,还给孩子吃,作为老公的我已经说过无数次,但是就是不改,我应该怎么面对?——你无法替别人完成成长‌。她的选择,终将由她自己承担后果;而你能做的,是守护好孩

妻子天天就是不听劝,每天买很多垃圾零食给自己吃,还给孩子吃,作为老公的我已经说过无数次,但是就是不改,我应该怎么面对? 一、先理解:她为何“不听劝” 改变饮食习惯之所以困难,不只是“嘴馋”,背后有‌生理、心理与行为惯性‌三重阻力: 肠道菌群依赖‌:长期高油高糖…

作者头像 李华
网站建设 2026/4/27 16:31:33

如何高效维护Black文档:5个最佳实践确保代码与文档同步

如何高效维护Black文档&#xff1a;5个最佳实践确保代码与文档同步 【免费下载链接】black The uncompromising Python code formatter 项目地址: https://gitcode.com/GitHub_Trending/bl/black Black作为一款不妥协的Python代码格式化工具&#xff0c;其文档质量直接影…

作者头像 李华
网站建设 2026/4/27 16:30:28

Elasticsearch搜索算法深度剖析:BM25算法原理及与TF-IDF对比实战指南

Elasticsearch搜索算法深度剖析&#xff1a;BM25算法原理及与TF-IDF对比实战指南前言一、BM25 算法核心认知1.1 什么是 BM25&#xff1f;1.2 BM25 适用场景1.3 BM25 整体工作流程二、BM25 算法核心公式与组成部分2.1 BM25 核心公式2.2 公式中 5 大核心组件三、传统 TF-IDF 算法…

作者头像 李华
网站建设 2026/4/27 16:30:27

终极指南:3分钟学会用QtScrcpy在电脑上流畅控制安卓手机

终极指南&#xff1a;3分钟学会用QtScrcpy在电脑上流畅控制安卓手机 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcp…

作者头像 李华
网站建设 2026/4/27 16:22:20

OBS多平台直播同步终极方案:一键实现跨平台推流

OBS多平台直播同步终极方案&#xff1a;一键实现跨平台推流 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 对于直播内容创作者来说&#xff0c;多平台直播同步是扩大观众覆盖、提升内容…

作者头像 李华
网站建设 2026/4/27 16:17:57

华硕笔记本终极控制指南:G-Helper让你的ROG设备性能翻倍

华硕笔记本终极控制指南&#xff1a;G-Helper让你的ROG设备性能翻倍 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …

作者头像 李华