專欄:50多種數據結構徹底征服
專欄:50多種經典圖論算法全部掌握
最近DeepSeek真的是火爆,網絡上鋪天蓋地的全是關于DeepSeek的介紹,我順便也看了下同類工作的招聘條件,學歷要求到不高,大部分本科就可以,但薪資開的真的很高,動輒年薪百萬,這也是未來一個很好的就業機會。如果想從事這一行業,首先把C++和Python學好,然后熟練掌握一種主流深度學習框架,比如PyTorch或Tensorflow,后面就可以直接實習或者找工作了,機會要把握住。
--------------下面是今天的算法題--------------
來看下今天的算法題,這題是LeetCode的第202題:快樂數。
問題描述
來源:LeetCode第202題
難度:中等
編寫一個算法來判斷一個數 n 是不是快樂數。
「快樂數」 定義為:
·對于一個正整數,每一次將該數替換為它每個位置上的數字的平方和。
·然后重復這個過程直到這個數變為 1,也可能是無限循環但始終變不到 1。
·如果這個過程結果為 1,那么這個數就是快樂數。
如果 n 是快樂數就返回 true ;不是,則返回 false 。
示例1:
輸入:n = 19 輸出:true 解釋: 1^2 + 9^2 = 82 8^2 + 2^2 = 68 6^2 + 8^2 = 100 1^2 + 0^2 + 0^2 = 1
示例2:
輸入:n = 2 輸出:false
1 <= n <= 2^31 - 1
問題分析
這題是讓判斷給定的數是否是快樂數,快樂數的定義是把當前數字每個位置上數字的平方相加來替換當前數字,一直重復下去,直到當前數字變成 1 ,那么這個數字就是快樂數。
還有可能永遠都不會變成 1 ,這種情況就不可能是快樂數, 如果不是快樂數在計算的時候一定會出現循環 ,比如4->16->37->58->89->145->42->20->4,4 在計算的時候出現了循環,所以 4 就不是快樂數。
我們可以使用一個集合set來記錄有沒有出現重復的數字,如果計算的時候出現重復的數字,說明出現了循環,那么當前數字就不是快樂數。
JAVA:
public boolean isHappy(int n) {
Set
set = new HashSet<>(); while (n != 1 && set.add(n)) n = next(n); return n == 1; } private int next(int n) { int sum = 0; while (n > 0) { int d = n % 10; // 求余數 sum += d * d; n /= 10; } return sum; }
C++:
public:
bool isHappy(int n) {
unordered_set
mySet; while (n != 1 && !mySet.count(n)) { mySet.emplace(n); n = next(n); } return n == 1; } int next(int n) { int sum = 0; while (n > 0) { int d = n % 10;// 求余數 sum += d * d; n /= 10; } return sum; }
Python:
def isHappy(self, n: int) -> bool:
def next(n: int):
sum = 0
while n > 0:
n, d = divmod(n, 10)
sum += d ** 2
return sum
mySet = set()
while n != 1 and n not in mySet:
mySet.add(n)
n = next(n)
return n == 1
筆者簡介
博哥,真名:王一博,畢業十多年, 作者,專注于 數據結構和算法 的講解,在全球30多個算法網站中累計做題2000多道,在公眾號中寫算法題解800多題,對算法題有自己獨特的解題思路和解題技巧,喜歡的可以給個關注,也可以 下載我整理的1000多頁的PDF算法文檔 。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.