Open1

【LeetCode】476.number_compliment

yzzzyzzz

概要

内容

  • 整数を受け取る
  • 受け取った整数をバイナリ(2進数に変換する)
  • 0と1を反転させる
  • 反転させた値を10進数に変換する

かかった時間

なんだかんだ1時間くらい

この問題で学んだこと

  • 異なる進数に変換すると何進数かを表すプレフィックスを処理する必要がある。(それはそう)
  • pytonでintはリテラルじゃない
  • 文字列から先頭n文字を削除する方法

解答

class Solution:
    def findComplement(self, nums: int) -> int:
        nums = str(bin(nums))[2:]
        revNums = list(map(lambda num: "0" if num=="1" else "1", nums))
        revNums = "".join(revNums)
        return int(revNums, 2) 

結果

ランタイムは真ん中くらい。キャストしなくてもできるのかな〜あとmapのまま処理できるとか?
もっと使えそうなビルトインとかありそう。

メモリに関してはこれくらい使うことがどうなのかよくわからない。
少ないほうがいいに越したことはないと思うけど。

discussから引用

https://leetcode.com/problems/number-complement/discuss/96009/Simple-Python

iQの違いをまざまざと見せつけられる。。。
これ見ちゃうと処理の順番考えるとかじゃなくて最初から何の問題として捉えるかが重要になってきそう。
何の問題として捉えられるか、の選択肢を増やしてくにはどんな勉強すればいいんだろうか。

class Solution(object):
    def findComplement(self, num):
        i = 1
        while i <= num:
            i = i << 1
        return (i - 1) ^ num

参考にした記事
Pythonで先頭のn文字を削除する
【Python】16進数・2進数・8進数と10進数を変換する