问题
参加笔试遇到的一道编程题,给定一个整数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。
我们试着写一些二进制数
<