분할정복(예1) 9자리 전화번호의 문자조합
전화번호 문자 조합 숫자 2-9만 포함하는 문자열이 주어지면 그것이 나타낼 수 있는 모든 문자 조합을 반환합니다. 답변은 어떤 순서로든 반환될 수 있습니다. 숫자와 문자의 매핑은 아래와 같습니다(전화 키와 동일). 참고 1은 어떤 문자에도 해당하지 않습니다⺟
•
• 예 1: 输⼊:digits = "23" 输出: [“ad","ae","af","bd","be","bf","cd","ce","cf" ]
• 예 2: 입력: 숫자 = "" 출력: []
• 예 3: 입력: 숫자 = "2" 출력: ["a","b","c"]
리트코드17
d={2:'abc',3:'def',4:'ghi',
5:'jkl',6:'mno',7:'pqrs',
8:'tuv',9:'wxyz'
}
res=[]
def gene(digits,i,s):
if len(digits)==len(s): #
res.append(s)
return
m=d[int(digits[i])] # 获得对应字母 digits[i]为str类型
for a in m:
gene(digits,i+1,s+a) # 进入下一层 i加1 递归下一个位置 s+a保存当前字母
digits='29' # str类型
gene(digits,0,'')
print(res)
잘 이해가 안 돼요
분할 및 정복(예 2)은 pow(x, n)을 구현합니다. 즉, x의 n번째 거듭제곱 함수를 계산합니다.
• 예시 1:
• 입력: 2.00000, 10
• 출력: 1024.00000
• 예시 2:
• 입력: 2.10000, 3
• 출력: 9.26100
• 예시 3:
• 입력: 2.00000, -2
• 출력: 0.25000
• 설명: 2-2 = 1/22 = 1/4 = 0.25
def pow(x,n):
if n==1:
return x
y=pow(x,n//2)
if n%2==0:
return y*y
else:
return y*y*x
잘 이해가 안 돼요
역추적(예 3) 여덟 여왕 문제
8×8 체스판에 8개의 퀸을 서로 공격할 수 없도록 배치합니다. 즉, 같은 행, 열 또는 대각선에 두 개의 퀸이 있을 수 없습니다. 배치하는 방법은 몇 가지입니까?
역추적법: 갈등이 있으면 해결하고, 갈등이 없으면 앞으로 나아가고, 돌아갈 길이 없으면 답은 끝이다.
'''
递归参数:
n: n皇后
i: 递归到第几行 0
l: 记录路径结果 [-1]*n
标记list: lie=[]
zXie=[]
fXie=[]
'''
lie=[]
zXie=[]
fXie=[]
res=[]
def que(n,i,l):
if n==i:
res.append(l[:])
return
for j in range(n): # 查找i行存放的位置
if (j not in lie) and (i+j not in zXie) and (i-j not in fXie): # j为可以放
lie.append(j)
zXie.append(i+j)
fXie.append(i-j)
l[i]=j
que(n,i+1,l)
lie.remove(j)
zXie.remove(i+j)
fXie.remove(i-j)
l[i]=-1
l=[-1]*4
que(4,0,l)
print(res)
하위 집합을 찾기 위한 역추적(예 4)
정수 배열 nums가 주어졌는데, 배열의 요소는 서로 다릅니다. 이 배열의 가능한 모든 하위 집합을 반환합니다.
솔루션 세트에는 중복된 하위 세트가 포함될 수 없습니다. 솔루션 세트는 어떤 순서로든 반환할 수 있습니다.
예시 1:
입력: 숫자 = [1,2,3]
출력: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
예 2:
입력: 숫자 = [0]
출력: [[],[0]]
'''
i: 下一次开始的位置
n: nums的长度
l:记录结果 []
'''
res=[] # 最终结果
def gene(nums,i,n,l):
res.append(l)
for j in range(i,n):
gene(nums,j+1,n,l+[nums[j]])
nums=[1,2,3]
n=len(nums)
gene(nums,0,n,[])
print(res)
역추적(예 5) 대부분의 요소
크기가 n인 배열이 주어지면 해당 배열의 요소 대부분을 찾습니다. 다수의 요소는 배열에서 ⼊ n/2 ⌋ 번 이상 나타나는 요소를 나타냅니다.
배열은 비어 있지 않으며 주어진 배열에는 항상 대부분의 요소가 있다고 가정할 수 있습니다.
예시 1:
입력: [3,2,3]
출력: 3
예 2:
입력: [2,2,1,1,1,2,2]
출력: 2
질문을 이해하지 못했습니다