胖虎的演算法初練三之 回文數

2021-10-07 19:02:44 字數 1435 閱讀 6567

判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

示例 1:

輸入: 121

輸出: true

示例 2:

輸入: -121

輸出: false

解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是乙個回文數。

示例 3:

輸入: 10

輸出: false

解釋: 從右向左讀, 為 01 。因此它不是乙個回文數。

小於0,負數,肯定不是回文數

對於最後一位是0的數,第一位肯定也是0,這種情況只有是0。還有個位數也不是回文數所以對10取余為0並且不是0的數也不是回文數。

3. 將這個輸入的數x的數後幾位反轉之後與前幾位比較(整數的反轉見上篇),這樣做可以防止比較過程中回文數較大導致的溢位。

4. 規定乙個revertednumber記錄x後幾位反轉後的值,用於與x比較。

0也是回文數。

x=121

x=121 revertednumber=0

x=12 rnum=1

revertednumber=0

rnum=rnum*10+x%10

rnum=0*0+121%10=1

rnum=rnum*10+x%10

rnum=1*10+12%10=12

x=121

x=x/10=121/10=12

x=x/10=12/10=1

此時因為x此時就判斷121前一位x=1 與後兩位revertednumber=12是否相等

因為是奇數為中間值為2所以除10省去最後判斷x==revertednumber/10即可。

x=1221

x=1221 rnum=0

x=12 rnum=1

rnum=0

rnum=rnum*10+x%10

rnum=0*0+1221%10=1

rnum=rnum*10+x%10

rnum=1*10+122%10=12

x=1221

x=x/10=121/10=122

x=x/10=121/10=12

此時x==revertednumber=12 跳出了迴圈

最後判斷x==revertednumber/10即可。

class solution 

int revertednumber = 0;

while(x>revertednumber)

}return x==revertednumber||(x==revertednumber/10);

}}

胖虎演算法初練四之 有效的括號

需求 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串 空字串為有效字串。使用棧存入和判斷 遍歷字串,轉換為字元陣列,每次拿出來乙個判斷,如果是 就將 存入棧中用於一會判斷同理其他括號也是。當左括號全...

初入演算法的三大排序

冒泡法 相信大家接觸排序的時候時首先都會接觸這個簡單的排序,但是不瞞大家說本人在接觸的時候總是感覺已經懂了但是過一段時間又忘記了是什麼原理。所謂冒泡 簡而言之便是先把最大的交換在最後面,然後再重新輪迴,按從大到小的順序乙個乙個的沉下來。優化思路 設定乙個退出迴圈的條件,如果有乙個未進行排序,則這個陣...

演算法小練 只出現一次的數字驗證回文串

title 演算法小練 只出現一次的數字驗證回文串 date 2019 11 17 19 51 54 categories 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 ...