题目描述:https://leetcode.cn/problems/valid-permutations-for-di-sequence/
没有更好思路时,dfs 也许就是最好的思路。 超时也好过不会做吧。
int res;
void dfs(char *s, int index, int size, int *hash, int pre_data)
{
if (index == (size - 1)) {
res++;
return;
}
for (int i = 0; i < size; i++) {
if (hash[i] != 0) continue;
if (s[index] == 'D') {
if (pre_data > i) {
hash[i] = 1;
dfs(s, index + 1, size, hash, i);
}
} else {
if (pre_data < i) {
hash[i] = 1;
dfs(s, index + 1, size, hash, i);
}
}
hash[i] = 0;
}
}
int numPermsDISequence(char * s){
int len = strlen(s);
int *hash = (int *)malloc(sizeof(int) * (len + 1));
res = 0;
memset(hash, 0, sizeof(int) * (len + 1));
for (int i = 0; i < len + 1; i++) {
hash[i] = 1;
dfs(s, 0, len + 1, hash, i);
hash[i] = 0;
}
return res;
}