題目描述:
判斷乙個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
示例 1:
輸入: 121
輸出: true
示例 2:
輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是乙個回文數。
示例 3:
輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是乙個回文數。
看到這道題,首先想到的是用字串來處理,用reverse()方法反轉字串,來進行比較,但這種做法會占用一定的空間,也由於題目要求不能用字串形式來寫。
第三種想法是說,將這個數考慮只反轉int 數字的一半,畢竟,如果該數字是回文,其後半部分反轉後應該與原始數字的前半部分相同。例如456654---前一半456,反轉後一半456,相等則456654是回文數。
注釋:除了字串,其餘兩種整數的方式,都相似, 負數,尾數為0的數那都不是回文數,可以先加乙個判斷,排除這些數,這樣的話,程式執行能快點。
第二種方法具體**如下:
int newnum = 0;
// 第一種方法 ,反轉數字比較,但有可能溢位,反轉後的數溢位肯定不是回文數。(加判斷)
if ((num<0)||(num!=0&&num%10==0))
for(;num!=0;num/=10)
for(;num>newnum;num/=10)
// 當數字長度為奇數時,我們可以通過 newnum/10 去除處於中位的數字。
// 例如,當輸入為 12321 時,在for 迴圈的末尾我們可以得到 x = 12,newnum = 123,
if (num==newnum||n==newnum/10)
else
執行結果跟第二種方法一樣,時間複雜度也是。
2019-1-17記錄
leetcode題庫 回文數
判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。輸入 121 輸出 true輸入 121 輸出 false 解釋 從左向右讀,為 121 從右向左讀,為 121 因此它不是乙個回文數。輸入 10 輸出 false 解釋 從右向左讀,為 01 因此它不是乙個回文...
leetcode題庫 最長回文子串
給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。輸入 cbbd 輸出 bb class solution for int i 0 i 0 i j 1max return str 奇偶長度的回文字串中心是不一樣的...
leetcode題庫 四數之和
給定乙個包含 n 個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與target相等?找出所有滿足條件且不重複的四元組。答案中不可以包含重複的四元組。給定陣列 nums 1,0,1,0,2,2 和 target 0。滿足要求...