当前位置: 首页 > news >正文

深圳网站建设公司服务商网站建设的意义和作用

深圳网站建设公司服务商,网站建设的意义和作用,天津网站建设电焊机,东莞微网站制作不含101的数 题目描述 小明在学习二进制时,发现了一类不含 101的数,也就是: 将数字用二进制表示,不能出现 101 。 现在给定一个整数区间 [l,r] ,请问这个区间包含了多少个二进制不含 101 的整数? 输入描述…

不含101的数

题目描述

小明在学习二进制时,发现了一类不含 101的数,也就是:
将数字用二进制表示,不能出现 101 。
现在给定一个整数区间 [l,r] ,请问这个区间包含了多少个二进制不含 101 的整数?

输入描述

输入的唯一一行包含两个正整数 l, r( 1 ≤ l ≤ r ≤ 10^9)。

输出描述

输出的唯一一行包含一个整数,表示在 [l,r] 区间内一共有几个不含 101 的数。

输入1 10
输出8
说明区间 [1,10] 内, 5 的二进制表示为 101 ,10的二进制表示为 1010 ,因此区间 [ 1 , 10 ] 内有 10−2=8 个不含 101的数。
输入10 20
输出7
说明区间 [10,20] 内,满足条件的数字有 [12,14,15,16,17,18,19] 因此答案为 7。

源码和解析
解析:

思路1:
for循环暴力求解。十进制转二进制再转字符串。借助字符串的indexOf来判断是否包含。
这种方式就是区间过大时花费的时间会比较久一些。

示例代码(暴力破解):

public class T28 {public static void main(String[] args) {String input="1 10";int left=Integer.parseInt(input.split(" ")[0]);int right=Integer.parseInt(input.split(" ")[1]);int count=right-left+1;// 二进制不包含101的个数for(;left<=right;left++){if(Integer.toBinaryString(left).indexOf("101")!=-1){count--;}}System.out.println(count);}
}

当输入的值为10和20时,测试输出与结果如下图:
在这里插入图片描述
解析:

思路2:使用简单数位DP算法(数不再是数,而是由多个单字符组成的字符)进行求解
若对数位DP算法不懂的,可以参考我的另一篇博客
【算法】使用数位算法生成0至某个数之间的整数(for循环之外的另一种实现方式,蛮长见识的)

public class T28 {public static int raw[] = null;public static int num[] = null;public static int count = 0;public static void main(String[] args) {String input = "20 50";int left = Integer.parseInt(input.split(" ")[0]);int right = Integer.parseInt(input.split(" ")[1]);int totalCount = right - left + 1;// 二进制不包含101的个数handle(left - 1);int leftCount = count;count = 0;handle(right);int rightCount = count;System.out.println(totalCount - (rightCount - leftCount));}public static void handle(int number) {int len = (number + "").length();raw = new int[len];num = new int[len];for (int i = 0; i < len; i++) {raw[i] = number % 10;number /= 10;}dfs(len - 1, true);}static StringBuilder sb = new StringBuilder();public static void dfs(int p, boolean limit) {if (p < 0) {for (int i = num.length - 1; i >= 0; i--) {sb.append(num[i]);}if (Integer.toBinaryString(Integer.parseInt(sb.toString())).indexOf("101") != -1) {count++;}sb.setLength(0);return;}int up = limit ? raw[p] : 9;for (int i = 0; i <= up; i++) {num[p] = i;dfs(p - 1, limit&&i==up);}}
}

算法时间比较:

输入算法输出耗时
1 10数位DP8481000纳秒
1 10暴力破解8454500纳秒
10 20数位DP7507200纳秒
10 20暴力破解7445800纳秒
2000 5000000数位DP376367622331000纳秒
2000 5000000暴力破解376367230676000纳秒

从时间的角度来说,这里并未充分发挥出数位DP算法的优势。但是数位DP算法对数字的长度限制会小很多。

http://www.mmbaike.com/news/53856.html

相关文章:

  • 建个网站 费用女教师遭网课入侵直播录屏曝光i
  • 做慈善黄色网站百度免费发布信息网站
  • 网站建设前后台语言个人开发app可以上架吗
  • 用wordpress仿a站广东seo推广外包
  • 自己做网站可以盗图吗十大搜索引擎排行榜
  • 企业官方网站建设营销网络的建设
  • 免费3d动画制作软件优帮云排名优化
  • 包头北京网站建设百度网页版入口链接
  • 怎么查看网站有没有做竞价广告资源发布平台
  • 网站模板放哪注册安全工程师
  • 网站横幅背景图南京seo推广公司
  • 做网站必须要推广吗seo云优化软件
  • 凡客家居怎么样seo在线优化平台
  • 急招程序员合肥360seo排名
  • 上海外贸网站优化百度seo按天计费
  • 做app 的模板下载网站有哪些内容郑州网站推广报价
  • 厦门正规网站建设多少表白网页制作免费网站制作
  • .tv可以做门户网站不徐州百度运营中心
  • 苏州互联网企业排名宁波seo推广优化公司
  • 做web网站seo外包优化
  • 建设银行网盾进不去网站是怎么办天津快速关键词排名
  • 网站排版设计欣赏seo现在还有前景吗
  • 浙江义乌小商品批发进货网武汉seo优化公司
  • 网站织梦后台一片白如何利用seo赚钱
  • 济南网站建设公我是做推广的怎么找客户
  • 极简主义的网站做推广公司
  • 网站设计的技能hao123主页
  • 句容工程建设招标网站交换友情链接的网站标准是什么
  • 在阿里云上做网站步骤百度一下就知道官方网站
  • 网站建设方案汇报江门seo