검 지 offer 문자열 의 배열 (전체 배열 역 추적, DFS)
12760 단어 쇠 그물검지offer알고리즘 --- 배열 조합
문자열 을 입력 하고 이 문자열 의 모든 배열 을 사전 순서에 따라 출력 하 십시오.예 를 들 어 문자열 abc 를 입력 하면 문자 a, b, c 가 배열 할 수 있 는 모든 문자열 abc, acb, bac, bca, cab 와 cba 를 출력 합 니 다.입력 설명: 문자열 을 입력 하 십시오. 길 이 는 9 를 초과 하지 않 습 니 다. (문자 중복 이 있 을 수 있 습 니 다) 문 자 는 대소 문자 만 포함 합 니 다.
솔 루 션 1 교체
# -*- coding:utf-8 -*-
class Solution:
def Permutation(self, ss):
if not ss:
return []
ans, tmpans = [ss[0]], []
for i in range(1, len(ss)):
for item in ans:
for j in range(len(item)+1):
# print(item)
tmp = item[:j]+ss[i]+item[j:]
if tmp not in tmpans:
tmpans.append(tmp)
ans = tmpans
tmpans = []
ans.sort()
return ans
솔 루 션 2 역 추적
모두 줄 지어 거 슬러 올라가다.
class Solution:
def Permutation(self, ss):
n = len(ss)
res = []
def helper(s, tmp):
if tmp and not s and tmp not in res:
res.append(tmp[:])
for i in range(len(s)):
helper(s[:i]+s[i+1:], tmp+s[i])
helper(ss, '')
return res
Solution 3 DFS
일반적인 DFS 는 배열 로 돌아 가 다시, 정렬 처 리 를 하 는 것 에 주의 하 십시오.
class Solution:
def __init__(self):
self.ss = ''
self.visited = []
self.tmpAns = []
self.ans = []
def Permutation(self, ss):
self.ss = ss
self.visited = [False for _ in self.ss]
self.tmpAns = [None for _ in self.ss]
if ss != '':
self.DFS(0)
res = [''.join(_) for _ in self.ans]
res = list(set(res))
res.sort()
return res
def DFS(self, curIndex):
if curIndex == len(self.ss):
self.ans.append(self.tmpAns[:])
# print(self.tmpAns)
return
for index in range(len(self.ss)):
if self.visited[index] == False:
self.visited[index] = True
self.tmpAns[curIndex] = self.ss[index]#index curIndex
self.DFS(curIndex+1)
self.visited[index] = False
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
검지offer의 면접문제 24: 두 갈래 나무와 어떤 값의 경로제목: 두 갈래 트리와 정수를 입력하고 두 갈래 트리의 결점 값과 정수를 입력하기 위한 모든 경로를 출력합니다.경로는 나무의 뿌리 결점에서 시작하여 잎 결점까지 내려가는 결점으로 경로를 형성합니다. 예를 들어 다음 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.