技術提高是一個循序漸進的過程,所以我講的leetcode算法題從最簡單的level開始寫的,然後到中級難度,最後到hard難度全部完。目前我選擇C語言,Python和Java作為實現語言,因為這三種語言還是比較典型的。由於篇幅和精力有限,其他語言的實現有興趣的朋友請自己嘗試。
如果有任何問題可以在文章後評論或者私信給我。
如果有朋友希望我講些其他話題,請在評論區留言或者私信給我。
持續分享,敬請關注。
LeetCode 1323. 最大的69數(Maximum 69 Number)
問題描述:
給定一個僅由數字6和9組成的正整數num。你可以將6變成9或者9變成6,如果最多隻允許改變一位,那麼num最大能變成幾?
注:
- 1 <= num <= 10^4;
- num 僅包含 6 或 9;
示例:
C語言實現:
這道題非常之簡單,解法不止一種,我只說我認為最精簡的一種,如果有更好的解法,歡迎讀者朋友,在評論區繼續補充。
直接上代碼:
因為num最大就是一個四位數,所以我想,最好的辦法就是從高位向低位遍歷,這樣如果找到第一個6,將其替換為9,也就是在這一位上直接加3,結果就是得到最大數。我們只需要一次遍歷即可。
定義變量n,初始值是1000,用來提取某位的數值,隨著遍歷的繼續,n會被不斷的除10;m初值是num,注意這是一個變量,隨著遍歷的繼續,如果高位是9,那麼會被一次次丟棄。
注意for循環的條件,一定要判斷n是否為真,因為n是可能為0的,如果不判斷,那麼m/n可能會發生除0異常了。
舉一個例子, num = 9966:
第一次循環:n=1000,m = 9966;
第二次循環:n=100,m = 966;
第三次循環:n=10,m = 66,返回 = num + 3*n = 9996 ;
Java語言實現:
Java 的實現和C語言的實現一致,不再撰述。
代碼如下:
Python語言實現:
Python 的實現和C語言的實現一致,唯一不同是for循環改用while循環,不再撰述。
代碼如下: