[レベル2]次の大きな数字

4094 ワード

答えを出す。

def solution(n):
    def count_one(n):
        count = 0
        for i in bin(n)[2:]:
            if i == "1":
                count += 1
        return count

    one_num = count_one(n)

    for i in range(n + 1, 1000001):
        if count_one(i) == one_num:
            return i
まず受け取ったnをバイナリに変換してから、1つの数を数えます.bin関数を用いてバイナリに変換され、strタイプに変換され、0bで開始される.
従って、0b部を除去するためにSleingを用い、forゲート数'1'文字を囲んでいる.
パラメータとして受信したnより大きい場合、バイナリに変換する場合、1の個数は同じ数字を見つける必要があるので、nより大きい値からforゲートを回転し、count_oneをバイナリに変換する場合、1の個数を与える.1の数が同じ数字が見つかれば、その数字を返すことができます.

説明する。

def solution(n):
    c = bin(n).count("1")

    for m in range(n + 1, 1000001):
        if bin(m).count("1") == c:
            return m
論理は上記の「解1」と同じであるが、1法を用いてcount()の個数ルックアップをより簡単に実現した.