算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問(wèn)題叫做 快樂(lè)數(shù),我們先來(lái)看題面:https://leetcode-cn.com/problems/happy-number/Write an algorithm to determine if a number n is happy.
題意
編寫(xiě)一個(gè)算法來(lái)判斷一個(gè)數(shù) n 是不是快樂(lè)數(shù)。對(duì)于一個(gè)正整數(shù),每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和。然后重復(fù)這個(gè)過(guò)程直到這個(gè)數(shù)變?yōu)?1,也可能是 無(wú)限循環(huán) 但始終變不到 1。如果 可以變?yōu)?nbsp; 1,那么這個(gè)數(shù)就是快樂(lè)數(shù)。如果 n 是快樂(lè)數(shù)就返回 true ;不是,則返回 false 。示例
示例 1:
輸入:19
輸出:true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:
輸入:n = 2
輸出:false
解題
對(duì)于所有數(shù)字,會(huì)有三種情況2. 無(wú)限循環(huán)不快樂(lè)數(shù)3. 無(wú)限不循環(huán)不快樂(lè)數(shù)其中,不循環(huán)不快樂(lè)書(shū)不是絕對(duì)不循環(huán),比如 2 , 算算就知道一直會(huì)在 4 之后循環(huán). 但是 4 就會(huì)在本身開(kāi)始, 循環(huán).思路:建立 set 表,每次得到的數(shù)值都需要查閱是否出現(xiàn)過(guò),出現(xiàn)過(guò)就說(shuō)明死循環(huán)了class Solution {
private int getNext(int n) {
int totalSum = 0;
while (n > 0) {
int d = n % 10;
n = n / 10;
totalSum += d * d;
}
return totalSum;
}
public boolean isHappy(int n) {
Set<Integer> seen = new HashSet<>();
while (n != 1 && !seen.contains(n)) {
seen.add(n);
n = getNext(n);
}
return n == 1;
}
}
好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。