小数点を検索


プログラマ-小数点を検索

問題の説明


一桁と書かれた紙片が散らばっている.ばらばらの紙切れを貼って、いくつかの小数点を作ることができることを見たいです.
各紙片の数字の文字シリアル番号を指定すると、紙片で作成できるいくつかの数を返すための解法関数を完了します.

せいげんじょうけん

  • numbersは、長さが1または7未満の文字列です.
  • numberは0から9の数字で構成されています.
  • 013とは、0、1、3の数字が書かれた紙片が散らばっていることを意味する.
  • I/O例


    numbersreturn"17"3"011"2

    に近づく


    まず文字列の各文字を取得し、これまでチェックしていなかった数字が小数か小数かを判断し、小数の個数を保存します.
    このように,1桁の場合は小数を判別できるが,2つ以上の数を組み合わせたときに生じるすべての数をどのように求めるかわからないので,他の人の解答を見た.

    他人の解答

    from itertools import permutations
    import math
    
    def check(n):
        k = math.sqrt(n)
        if n < 2: 
            return False
    
        for i in range(2, int(k)+1):
            if n % i == 0:
                return False
        return True
    
    def solution(numbers):
        answer = []
        for k in range(1, len(numbers)+1):
            perlist = list(map(''.join, permutations(list(numbers), k)))
            for i in list(set(perlist)):
                if check(int(i)):
                    answer.append(int(i))
    
        answer = len(set(answer))
    
        return answer
    [プログラマー]少数/パイソン-チョコレート金賢宇を探す

    まず,check関数は私がこのアルゴリズムを解決するために実現したものである.重要なのは、permutationsを用いて閉塞部分を解決することである.permutationsは、順序の英語「置換」から推測することができ、与えられた文字のうち、第2のパラメータに渡された数から任意の順序のすべての状況を求め、配列文字に戻る.
    返される値が単純にlistに設定されている場合、結合可能な場合をsetに組み合わせて要素を作成することがわかります.問題を解決するためには、setの要素を組み合わせる必要があるので、''.joinにマッピングすることによって文字列を求める.
    その後、setで重複除外を行い、各要素をチェックし、少数であれば配列に入れる.しかし、0の組み合わせの結果は同じである可能性があるため、最後にanswer内の要素の重複を取り除き、残りの要素数を返すと、正解が得られる.