[プログラマ]小数点を検索



📩 -->問題の説明
一桁と書かれた紙片が散らばっている.ばらばらの紙切れを貼って、いくつかの小数点を作ることができることを見たいです.
各紙片の数字の文字シリアル番号を指定すると、紙片で作成できるいくつかの数を返すための解法関数を完了します.
せいげんじょうけん
  • numbersは、長さが1または7未満の文字列です.
  • numberは0から9の数字で構成されています.
  • 「013」とは、1、3の数字の紙片が散らばっていることを意味する.
  • I/O例
    numbersreturn"17"3"011"2
    💡 ソリューション(使用言語:python)
    from itertools import permutations
    # 조합을 이용해서 만들 수 있는 수를 만들어준다.
    def solution(numbers):
        prime=[]
        for i in range(1,len(numbers)+1):
            for j in list(set(permutations(numbers, i))):
                if ''.join(j)[0]!='0':
                    prime.append(int(''.join(j)))
        # 소수를 answer에 담아준다.
        answer=[]
        for i in prime:
            if i<2:
                continue
            check = True
            for j in range(2, int(i**0.5)+1):
                if i%j==0:
                    check=False
                    break
            if check:
                answer.append(i)
        return len(set(answer))
    👉 説明:
  • では、まず数値の数値を使用して数値を作成し、次に「組合せ」を使用して数値を作成します.
  • の効率性のため、通れないようですが、完全な探索のためか、通過しました...△0で始まる子や繰り返す子を除いた.
  • 小数点以下であるかどうかを確認する方法は、「エラトスのふるい」を使用しており、以下のように説明されています.
  • iを2から対応する数字の平方根(i**0.5)で割った場合、いずれも小数であり、そうでなければ小数である.
  • という部分で隠憂を食べた結果、checkがtrueの場合(少数の場合)にのみ回答した.

  • 別の解釈
    primeSet = set()
    
    
    def isPrime(number):
        if number in (0, 1):
            return False
        for i in range(2, number):
            if number % i == 0:
                return False
    
        return True
    
    
    def makeCombinations(str1, str2):
        if str1 != "":
            if isPrime(int(str1)):
                primeSet.add(int(str1))
    
        for i in range(len(str2)):
            makeCombinations(str1 + str2[i], str2[:i] + str2[i + 1:])
    
    
    def solution(numbers):
        makeCombinations("", numbers)
    
        answer = len(primeSet)
    
        return answer
    再帰関数を使用する方法!
    🌈 に感銘を与える
    2回目のテストのために...
    ソース:プログラマ
    間違いがあればメッセージをお願いします🙂