LeetCode基礎算法題第180篇:最大的69數

技術提高是一個循序漸進的過程,所以我講的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;

示例:

LeetCode基礎算法題第180篇:最大的69數

C語言實現:

這道題非常之簡單,解法不止一種,我只說我認為最精簡的一種,如果有更好的解法,歡迎讀者朋友,在評論區繼續補充。

直接上代碼:

LeetCode基礎算法題第180篇:最大的69數

因為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 ;

LeetCode基礎算法題第180篇:最大的69數

Java語言實現:

Java 的實現和C語言的實現一致,不再撰述。

代碼如下:

LeetCode基礎算法題第180篇:最大的69數

LeetCode基礎算法題第180篇:最大的69數

Python語言實現:

Python 的實現和C語言的實現一致,唯一不同是for循環改用while循環,不再撰述。

代碼如下:

LeetCode基礎算法題第180篇:最大的69數

LeetCode基礎算法題第180篇:最大的69數


分享到:


相關文章: