#概要
海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。
その対策としてLeetCodeなるサイトで対策を行うようだ。
早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイト。
せっかくだし人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。
前回
ゼロから始めるLeetCode Day48 「26. Remove Duplicates from Sorted Array」
今はTop 100 Liked QuestionsのMediumを優先的に解いています。
Easyは全て解いたので気になる方は目次の方へどうぞ。
Twitterやってます。
問題
難易度はEasy。
Goodの数の方が多く、面白そうな問題だと思ったので紹介します。
6と9のみで構成された正の整数であるnum
が与えられます。
一桁だけ数字を6から9,もしくは9から6に変えても良いので、num
を変えることのできる最大値にして返すようなアルゴリズムを設計してください、という問題です。
Input: num = 9669
Output: 9969
Explanation:
Changing the first digit results in 6669.
Changing the second digit results in 9969.
Changing the third digit results in 9699.
Changing the fourth digit results in 9666.
The maximum number is 9969.
Input: num = 9996
Output: 9999
Explanation: Changing the last digit 6 to 9 results in the maximum number.
Input: num = 9999
Output: 9999
Explanation: It is better not to apply any change.
解法
桁が多いところを6から9に変えればより大きな数値になることがわかると思います。
なので、replace関数を使って考えました。
replace関数では、引数が(置換される対象、置換する要素、最大値間回数)となっているので、文字列の要素を前から調べ、一回だけ置換したものを返せば実際にうまくいくのではと考え、以下のように書きました。
class Solution:
def maximum69Number (self, num: int) -> int:
return int(str(num).replace('6','9',1))
# Runtime: 28 ms, faster than 73.29% of Python3 online submissions for Maximum 69 Number.
# Memory Usage: 13.8 MB, less than 58.88% of Python3 online submissions for Maximum 69 Number.
なかなか良さげですね。
なお、replace関数では文字列のみ受け取るので、一度文字列に変換したものをreplace関数にかけ、その後返す際にintにしなければなりません。
今回はここまで、お疲れ様でした。