숫자 n이 있다고 가정하면 이 숫자의 모든 하위 숫자가 고유한 자릿수 곱을 갖는지 여부를 확인해야 합니다. 알다시피, n자리 숫자는 n*(n+1)/2개의 하위 숫자를 갖습니다. 예를 들어, 135의 하위 숫자는 1, 3, 5, 13, 35, 135입니다. 그리고 숫자의 자릿수 곱은 해당 자릿수의 곱입니다.
따라서 입력이 n =235와 같으면 하위 번호가 [2, 3, 5, 23, 35, 235]이고 숫자 곱이 [2, 3, 5, 6, 15, 30이므로 출력은 True가 됩니다. ]
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
dig_prod() 함수를 정의합니다. 숫자가 필요합니다.
- 제품:=1
- 각 d에 대해 다음을 수행합니다.
- 제품 :=제품 * d
- 반품
- 기본 방법에서 다음을 수행합니다.
- num_str :=문자열로 된 숫자
- 길이:=num_str의 크기
- digits :=크기 길이 목록이며 처음에는 모든 값이 null입니다.
- prod_set :=새로운 빈 세트
- 0부터 길이까지의 범위에 있는 i에 대해
- 숫자[i] :=num_str[i]를 정수로
- 0에서 길이 - 1까지의 범위에 있는 i에 대해
- i 범위에서 길이 - 1까지의 j에 대해
- 항목 :=dig_prod(숫자[인덱스 i에서 j까지])
- 항목이 prod_set에 있으면
- 거짓을 반환
- 그렇지 않으면
- prod_set에 항목 삽입
- i 범위에서 길이 - 1까지의 j에 대해
- 참 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
def dig_prod(digits): product = 1 for d in digits: product *= d return product def solve(num): num_str = str(num) length = len(num_str) digits = [None] * length prod_set = set() for i in range(0, length): digits[i] = int(num_str[i]) for i in range(0, length): for j in range(i, length): item = dig_prod(digits[i:j+1]) if item in prod_set: return False else: prod_set.add(item) return True n = 235 print(solve(n))
입력
235
출력
True