全排列题型
class Solution {
int[] a = new int[10]; // dfs时存储
char[] b = new char[10];
int[] c = new int[10]; // 存储成功结果
int[] vis = new int[10];
int flag=0;
int m;
public void dfs(int x){
if(flag==1)
return;
if(x>2){
if(b[x-2] == 'I' && a[x-2] > a[x-1])
return;
if(b[x-2] == 'D' && a[x-2] < a[x-1])
return;
}
if(x == m+2){ // 如果找到了一组符合规定的排列
flag=1;
for(int i=1;i<=m+1;i++){
c[i] = a[i];
}
}
for(int i=1;i<=9;i++) // 全排列
{
if(vis[i]==0)
{
a[x]=i;
vis[i]=1;
dfs(x+1);
vis[i]=0;
}
}
}
public String smallestNumber(String pattern) {
m=pattern.length();
for(int i=0;i<m;i++){
b[i+1] = pattern.charAt(i);
}
dfs(1);
StringBuilder s = new StringBuilder();
for(int i=1;i<=m+1;i++){
s.append(c[i]+"");
}
return s.toString();
}
}