示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是乙個回文數。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是乙個回文數。
你能不將整數轉為字串來解決這個問題嗎?
初步分析
可以暴力法,強行轉化成字串反轉判斷是否相同。
(上次的整數反轉演算法)可以利用取餘來每位反向新增入另乙個整數中。
(也是上次的整數反轉演算法)不過這次可以反轉一半和另一半比較相同則為回文數。
【小總結】
1.【盡量不要用暴力法】
2.【利用數**算eg:%,/】
【詳細總結】原xa
變化後x
result
1234
4123
4123312
431221
432111
4321
public
class
solution
return result==before;
}}
另乙個理解比較簡單的版本(反轉一半判斷)
public
class
solution
int result =0;
while
(x > result )
return x == result || x == result /10;
}}位運算子:
(a & b)
按位與運算子:參與運算的兩個值,如果兩個相應位都為1
,則該位的結果為1
,否則為0
輸出結果 12 ,二進位制解釋: 0000
1100
(a | b)
按位或運算子:只要對應的二個二進位有乙個為1時,結果位就為1。
輸出結果 61 ,二進位制解釋: 0011
1101
(a ^ b)
按位異或運算子:當兩對應的二進位相異時,結果為1
輸出結果 49 ,二進位制解釋: 0011
0001
(~a )
按位取反運算子:對資料的每個二進位制位取反,即把1變為0
,把0變為1 。~x 類似於 -x-
1 輸出結果 -
61 ,二進位制解釋: 1100
0011,在乙個有符號二進位制數的補碼形式。
a <
<
2 左移動運算子:運算數的各二進位全部左移若干位,由 <
< 右邊的數字指定了移動的位數,高位丟棄,低位補0。
輸出結果 240 ,二進位制解釋: 1111
0000
a >
>
2 右移動運算子:把">>"左邊的運算數的各二進位全部右移若干位,>
> 右邊的數字指定了移動的位數
輸出結果 15 ,二進位制解釋: 0000
1111
賦值運算子:
*= 乘法賦值運算子 c *
= a 等效於 c = c * a
/= 除法賦值運算子 c /
= a 等效於 c = c / a
%= 取模賦值運算子 c %
= a 等效於 c = c % a
**= 冪賦值運算子 c *
*= a 等效於 c = c *
* a //= 取整除賦值運算子 c //= a 等效於 c = c // a
演算法 回文數
題目描述判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。示例 1 輸入 121 輸出 true 示例 2 輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。示例 3 輸入 10 輸出 false 解釋 ...
演算法訓練 回文數
演算法訓練 回文數 時間限制 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...