演算法 回文數

2021-10-04 16:13:48 字數 1131 閱讀 2936

題目描述

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

示例 1:

輸入: 121

輸出: true

示例 2:

輸入: -121

輸出: false

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

示例 3:

輸入: 10

輸出: false

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

高階:

你能不將整數轉為字串來解決這個問題嗎?

解題

方法一:看到題的第一想法就是轉換成字串,然後前後比較,一直相同則為回文串,否則不是。(出題人也很清楚會有這個想法。。。)

這種解法需要較大的額外空間,不可取。

public

boolean

ispalindrome

(int x)

return

true

;}

方法二:不轉換成字串可以考慮反轉數字,再比較相同,反轉整數有可能出現整數溢位問題,當溢位時說明不是回文數。

public

boolean

ispalindrome

(int x)

re = re *

10+ a;

}return re == x;

}

方法三:與方法二一樣是反轉數字,但只反轉一半,若是回文數字則後一半與前一半相同。

注意數字長度若為單數,則反轉後的數字比前半段數字多一位中間值,故最後比較時re/10 == x

public

boolean

ispalindrome

(int x)

return re == x || re/

10== x;

}

演算法訓練 回文數

演算法訓練 回文數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 ...

演算法訓練 回文數

若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 step2 165 561 726 step3 726 627 1353 st...

演算法練習 回文數

問題描述 123321是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入乙個正整數n,程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 輸入格式 輸入一行,包含乙個正整數n。輸出格式 按從小到大的順序輸出滿足條件的整數,每個整數佔一行。樣例輸入 52樣例輸出 899998 989...