ゼロから始めるLeetCode Day49 「1323. Maximum 69 Number」

概要

海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。

どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。

早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。

と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。

ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。

Leetcode

Python3で解いています。
Twitterやってます。

ゼロから始めるLeetCode 目次

前回
ゼロから始めるLeetCode Day48 「26. Remove Duplicates from Sorted Array」
次回
ゼロから始めるLeetCode Day50「739. Daily Temperatures」

Twitterやってます。

問題

1323. Maximum 69 Number

難易度は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にしなければなりません。

今回はここまで、お疲れ様でした。

コメント

このブログの人気の投稿

Braveブラウザの同期機能をiPhoneで設定した話。

failed: unable to get local issuer certificate (_ssl.c:1123)と出たので解決した話

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した