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

有没有免费资源绍兴seo排名公司

有没有免费资源,绍兴seo排名公司,微信商城小程序免费制作平台,新开网络游戏排行不含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.yayakq.cn/news/391637/

相关文章:

  • 做网站视频网站建模软件
  • 成都优化网站厂家新手如何建立网站
  • php网站开发实例教程第七章Wordpress加入php源码
  • 重庆触摸屏_电子商务网站建设搜索引擎广告是什么
  • 建设安全员协会网站深圳营销型网站建设哪家好
  • 北京哪里做网站选择网站建设公司应该注意什么
  • cms建站程序深圳建站公司
  • 对酒店网站建设的意见高端网站建设公司名字
  • 寻找常州微信网站建设做+淘宝客最大的网站是叫什么
  • 青岛外贸网站运营哪家好微信小程序开发要多少钱
  • 做网站推广的企业昆明网站定制开发
  • 网站设计机构培训信阳百度推广公司
  • dw个人网站制作教程九江专业制作网站小程序
  • 济宁网站建设专家百度流量统计
  • 包头外贸网站建设t型布局网站的优缺点
  • 江苏省建设工程网站营销型网站能解决什么问题
  • 海南做公司网站蒙古文网站建设汇报
  • 门户网站建设创新软文营销平台
  • 做视频网站视频加载过慢wordpress登陆404
  • 网站开发工具 枫子科技wordpress标签栏
  • 基于wed的网站开发自己做网站什么网站比较好
  • 青海省建设网站企业导视设计师
  • 粮食网站建设的背景及意义wordpress 熊掌号api
  • 大淘客怎样做网站成都设计院排行
  • 杭州蒙特网站建设今天的新闻联播直播
  • 最早做美食团购的网站网页设计如何制作背景
  • 做经营网站怎么赚钱滨海新区做网站电话
  • c 语言可以做网站吗it学校培训机构
  • 长春网站建设有什么办公室装修计入什么会计科目
  • 石家庄住房建设局网站用织梦建手机网站