例子:
輸入: 121
輸出: true
輸入: -121
輸出: false
bool ispalindrome
(int x)
int r =0;
while
(x > r)
return x == r || x == r/10;
//12=123/10
}
解析:快慢指標找到鍊錶的中點。12321,slow指到3,讓fast指向slow.next為2.反轉後半部分鍊錶。再進行依次比對
public
boolean
ispalindrome
(listnode head)
listnode dummynode =
newlistnode(-
1); dummynode.next = head;
listnode slow = dummynode;
listnode fast = dummynode;
// 慢指標一次走一步,快指標一次走兩步,當快指標走到終點,慢指標剛好處於中點位置
while
(fast != null && fast.next != null)
// fast指標置於下半段鍊錶的起點
fast = slow.next;
// 斷開前後兩個鍊錶
slow.next = null;
// slow指標置於前半段鍊錶的起點
slow = dummynode.next;
// 反轉後半段鍊錶
listnode pre = null;
// 儲存指標前一節點的資訊,用於反轉
while
(fast != null)
// 前後半鍊錶逐一比較,當鍊表長度為奇數時前半段鍊錶長度比後半段多1,所以以後半段為準
while
(pre != null)
slow = slow.next;
pre = pre.next;
}return
true
;}
回文數 第N個回文數
判斷回文數還是不難,如果能轉為字串就更簡單了。如果是求第n個回文數呢。12321是乙個回文數,這裡先考慮一半的情況。回文數的個數其實是有規律的。如 1位回文數 9個 2位回文數 9個 3位回文數 90個 4位回文數 90個 5位回文數 900個 6位回文數 900個 我們看到9 90 900,是不是...
回文相關演算法
每次面試的時候問演算法的時候否 近期計畫去刷一下演算法,也在此做一下記錄 判斷乙個正整數是不是回文數。回文數的定義是,將這個數反轉之後,得到的數仍然是同乙個數。11,121,1,12321 這些是回文數。23,32,1232 這些不是回文數。依次對num取餘,採用臨時引數reverse 記錄轉化後的...
LeetCode回文相關
目錄 647.回文子串 獲取所有的子串 方法一 奇數和偶數拓展 方法二 動態規劃 重要 5.最長回文子串 方法一 拓展 然後更新最長的數 680.驗證回文字串 可以刪除乙個字元 方法一 遇到不對勁直接刪除然後再對比 131.分割回文串 方法一 遞迴 重要 給定乙個字串,你的任務是計算這個字串中有多少...