回文数算法

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),只需求出边界即可。(同理,偶数是关于中间对称)

posted @ 2022-04-13 08:43  星辉与你  阅读(845)  评论(0)    收藏  举报