LeetCode 超級回文數(轉換減小範圍)

2021-09-24 15:41:58 字數 2753 閱讀 1247

如果乙個正整數自身是回文數,而且它也是乙個回文數的平方,那麼我們稱這個數為超級回文數。

現在,給定兩個正整數 l 和 r (以字串形式表示),返回包含在範圍 [l, r] 中的超級回文數的數目。

示例:

輸入:l = "4", r = "1000"

輸出:4

解釋:4,9,121,以及 484 是超級回文數。

注意 676 不是乙個超級回文數: 26 * 26 = 676,但是 26 不是回文數。

1 <= len(l) <= 18

1 <= len(r) <= 18

l 和 r 是表示 [1, 10^18) 範圍的整數的字串。

int(l) <= int(r)

思路分

析:\color思路分析:

思路分析

:這道題測試資料非常大,所以不能直接從[l, r]一一進行判斷,我們得構造[l, r]中的回文數,然後判斷它是不是乙個回文數的平方,或者判斷[sqrt(l), sqrt(r)]中的回文數的平方是不是回文數。

方法一:直接尋找[l, r]中的回文數,然後判斷它是不是乙個回文數的平方。(超時)

class

solution

}//在[myleft, myright]依次尋找回文數

while

(mynum <= myright)

//自增mynum,尋找下乙個回文串,比如"1234321"下乙個回文數是「1235321」 = 1234321 + pow(10, len("1234321") / 2)

string strnum =

to_string

(mynum)

; mynum +

=pow(10

, strnum.

size()

/2);

strnum =

to_string

(mynum)

; string right = strnum.

substr(0

, strnum.

size()

/2);

reverse

(right.

begin()

, right.

end())

; mynum =

stoll

(strnum.

substr(0

, strnum.

size()

- right.

size()

)+ right);}

return rescount;

}//判斷乙個數是否是回文

方法二:判斷[sqrt(l), sqrt(r)]中的回文數的平方是不是回文數。

class

solution

}//在[myleft, myright]依次尋找回文數

while

(mynum <= myright)

//自增mynum,尋找下乙個回文串,比如"1234321"下乙個回文數是「1235321」 = 1234321 + pow(10, len("1234321") / 2)

string strnum =

to_string

(mynum)

; mynum +

=pow(10

, strnum.

size()

/2);

strnum =

to_string

(mynum)

; string right = strnum.

substr(0

, strnum.

size()

/2);

reverse

(right.

begin()

, right.

end())

; mynum =

stoll

(strnum.

substr(0

, strnum.

size()

- right.

size()

)+ right);}

return rescount;

}//判斷乙個數是否是回文

雖然通過了,蛋式時間複雜度、空間複雜度還是比較高。

使用時間0ms的思路是直接打表,面向測試示例程式設計。。。

LeetCode 906 超級回文數

如果乙個正整數自身是回文數,而且它也是乙個回文數的平方,那麼我們稱這個數為超級回文數。現在,給定兩個正整數l和r 以字串形式表示 返回包含在範圍 l,r 中的超級回文數的數目。示例 輸入 l 4 r 1000 輸出 4 解釋 4,9,121,以及 484 是超級回文數。注意 676 不是乙個超級回文...

leetcode906 超級回文數 沒有魔數

這道題答案其實只有70個最多,所以最快的解題者只要10ms 取巧 我是用正常人能理解的思路進行解題 例如 2839 38456739538 隨手寫的兩個數字 先進行開方處理得到53 196103 附 我先定義 回文源 就是通過這個數可以得到回文數,加上boolean值可以獲得回文,boolean用了...

力扣 超級回文數

如果乙個正整數自身是回文數,而且它也是乙個回文數的平方,那麼我們稱這個數為超級回文數。現在,給定兩個正整數 l 和 r 以字串形式表示 返回包含在範圍 l,r 中的超級回文數的數目。示例 輸入 l 4 r 1000 輸出 4 解釋 4,9,121,以及 484 是超級回文數。注意 676 不是乙個超...