題目描述
編寫乙個演算法來判斷乙個數 n 是不是快樂數。
「快樂數」定義為:對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。
如果 n 是快樂數就返回 true ;不是,則返回 false 。
示例
思路
定義:正整數按各個位上的數先平方,再相加求和,這種運算稱為f運算,記作f(x)。例如:x=19,f(x)=82 ; x=20,f(x)=4。數n是int型的正整數,範圍為0~2147483647。若x是int型的正整數,則當x=1999999999時,fmax=f(1999999999)=730。
若乙個數n不斷被替換成f運算的結果,則只會出現以下幾種結果:n最終變為1。
n的值會在某次f運算後週期性的迴圈,但變不成1。
n的值會無限不迴圈的變化,但變不成1。
n的值會無限變大。
由fmax=730可知,若n是int型的正整數,則其任何次f運算的結果都在1~730之間,不可能無限變大,所以結果4排除。同理,當n的f運算次數超過730時,其某兩次的f運算的結果必相同(鴿巢原理),只要出現兩次相同結果,則必然有迴圈,所以結果3排除。
現在只會出現兩種結果:可利用快慢指標解決該問題。**n最終變為1。
n的值會在某次f運算後週期性的迴圈,但變不成1。
LeetCode解題 快慢指標
leetcode 第 26 27 80 283屬於一類問題 陣列相關的 快慢指標 另外對於wc問題,hashmap總能求解。80.刪除排序陣列中的重複項 ii 題目描述 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素最多出現兩次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須...
LeetCode解題集 快慢指標
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。暴力解法 令快指標先走n步,慢指標等待快指標停下後隨快指標一起前進,同時用另一指標ret指向慢指標的上乙個節點。當快指標指向null時,ret正好指向倒數第n 1個結點處,此時可進行刪除操作。對於官方解法,可先另一指標指向啞節點,使慢...
Leetcode 快慢指標與鍊錶
1.給定乙個鍊錶,判斷鍊錶中是否有環。解釋 鍊錶中有乙個環,其尾部連線到第二個節點。ps 從例子中根本看不出來好嘛。自己理解就ok 經典思想,快慢指標,如果有環存在,快指標總會追上慢指標 python definition for singly linked list.class listnode ...