回溯几乎是万能解。
一、普通全排列回溯
1、全排列问题
需要把数组分成两部分,第一部分是排列好的,第二部分是待排列的,以backtrack里的start为界限。
backtrack(int start,int nums_size,int[]nums)
if start = nums_size
print (nums)
return
endif
for(i = start:nums_size)
swap(start,i,nums)
backtrack(start+1,nums_size,nums)
swap(start,i,nums)
end backtrack
backtrack(int n,int k,int[] array,int start)
if array.size() = k
print(array)
return
if array.size()+ n - k + 1 < k
return
arrary.push(start)
backtrack(n,k,array,start+1)
array.pop_back()
end backtrack
backtrack(int now,string s)
if(now = s.size())
print(s)
return
if(isaplha(s[i]))
backtrack(now+1,s)
s[i] = tolower(s[i])
backtrack(now+1,s)
s[i] = toupper(s[i])
backtrack(now+1,s)
end backtrack