求0到整数N中,每个“整数对应的二进制数是回文“的个数,优化解法

博客介绍了如何优化求解从0到N的整数中,二进制表示是回文数的个数。通过分析二进制数的特点,发现回文数个数与二进制位数有关,提出了一个规律f来计算固定长度的回文个数,从而减少了遍历次数,提高了算法效率。
摘要由CSDN通过智能技术生成

问题

参加笔试遇到的一道编程题,给定一个整数N,求从0到N,这N+1个整数中,对应二进制数是回文的个数有多少。

回文

解释一下什么是回文,就是正着读反正读都一样。

有一副经典的回文对联:上海自来水来自海上,黄山落叶松叶落山黄。

对于二进制数来说,也是同样的道理。

例如 :

十进制5,对应二进制数101,就是一个回文。

十进制6,对应二进制数110,就不是回文。

这个问题假如输入N为6,则应该输出4。

因为 从0到6中,十进制0,1,3,5对应的二进制0,1,11,101是回文,一共有4个

一般解法

通常的思路就是暴力运算,把每个十进制转换成二进制数,然后按个判断是不是回文,是的话count+=1,最后输出count。

(代码就不写了)

问题在于效率不高,从0到N都要遍历一遍,一般网上笔试题,对时间复杂度空间复杂度都有要求,这个方法只能通过一半的测试样例。

优化解法

这个题既然是二进制数,不是普通的字符串,那一定是有什么trick。

我们试着写一些二进制数

<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值