두 개의 양의 정수 x와 y가 있다고 가정하고 일부 정수 i>=0 및 j>=0에 대해 x^i + y^j와 같으면 정수가 강력하다고 말할 수 있습니다. 모든 목록을 찾아야 합니다. - bound보다 작거나 같은 값을 갖는 강력한 정수.
따라서 입력이 x =2 및 y =3이고 경계가 10이면 출력은 2 =2^0 + 3^과 같이 [2,3,4,5,7,9,10]이 됩니다. 0 3 =2^1 + 3^0 4 =2^0 + 3^1 5 =2^1 + 3^1 7 =2^2 + 3^1 9 =2^3 + 3^0 10 =2^ 0 + 3^2
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- a, b를 0으로 초기화
- res:=새 목록
- x가 1과 같고 y가 1이면
- 결합된 경우>=2이면
- res 끝에 2 삽입
- 그렇지 않고 x가 1과 같을 때
- y^b + 1 <=bound, do
- y^b + 1을 res에 삽입
- b :=b + 1
- y^b + 1 <=bound, do
- 그렇지 않고 y가 1과 같을 때
- x^a + 1 <=바인딩되는 동안 do
- x^a + 1을 res에 삽입
- a :=a + 1
- x^a + 1 <=바인딩되는 동안 do
- 그렇지 않으면
- x^a + 1<=bound, do
- x^a+y^b <=바인딩된 경우
- b :=b + 1
- 그렇지 않으면
- a :=a + 1
- b:=0
- x^a+y^b <=바인딩된 경우
- x^a + 1<=bound, do
- 결합된 경우>=2이면
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def powerfulIntegers(self, x, y, bound): a,b=0,0 res=[] if x==1 and y==1: if bound>=2: res.append(2) elif x==1: while y**b+1<=bound: res.append(y**b+1) b+=1 elif y==1: while x**a+1<=bound: res.append(x**a+1) a+=1 else: while x**a+1<=bound: if x**a+y**b<=bound: res.append(x**a+y**b) b+=1 else: a+=1 b=0 return list(set(res)) ob = Solution() print(ob.powerfulIntegers(2,3,10))
입력
2,3,10
출력
[2, 3, 4, 5, 7, 9, 10]