回文数算法
1.算法核心本质是将数据使用StringBuilder 或者StringBuffer 的方法reverse()反转,也就是倒序,检验前后两个值是否相等。
缺点:都是要从开头到结尾一个数一个数的遍历来求的,如果遍历数据很大,即使时间复杂度是O(n)也会很慢。
所以需要改进,改进的原理是根据规律:
1位回文数:9
2位回文数:9
3位回文数:90
4位回文数:90
5位回文数:900
6位回文数:900
....
如此,给出一个数,比如324,那就直接确定两位回文数的个数是9+9=18;剩下的回文数个数就是100-324 遍历来求。
但是即便如果,数据特别大的时候,比如2000000000,这样的方法一样非常耗时,所以还需要使用另外的思想,化半。
举例100-324 奇数,最大回文数是根据中间值对称,100的回文数是101,大于100,满足,从10开始,关于0对称即可。
324回文数是323,小于324,满足,从32结束即可,那么确定了边界10-32,这里每一个值都是回文数,无需遍历可以直接计算32-10+1 = 23个回文数。再加上两位和一位上的回文数,综合就是23+18 = 41个回文数。
时间复杂度可以达到O(1),只需求出边界即可。(同理,偶数是关于中间对称)

浙公网安备 33010602011771号