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),只需求出邊界即可。(同理,偶數是關於中間對稱)
