老师,这次我不问问题,今天的每日一题我用的是纯粹递归回溯来求解的,作一个分享。动态规划太有技巧了,要找规律,我还是偏向于这种传统的求解方式 求解。 虽然不是高效的,但是通过了测试用例。
/**
* @param {number} n
* @return {number}
*/
const alphabets = ['a', 'e', 'i', 'o', 'u']; // 元音字符集
var countVowelStrings = function(n) {
// tmpArr: 临时用于存放元素的数组, resArr: 最终收集到的结果所组成的数组
let tmpArr = [], resArr = [];
dfs(alphabets, n, 0, tmpArr, resArr);
return resArr.length;
};
//arr: 考察的数组(元音字符集), N:期待长度为N, index: 从index个开始考察, tmpArr: 临时用于存放元素的数组, resArr: 最终收集到的结果所组成的数组
function dfs( arr, N, index, tmpArr, resArr ){
if( tmpArr.length == N ){ // tmpArr 到了指定长度 N
resArr.push([...tmpArr]); // 找着一个结果,通过拷贝tmpArr放入到resArr中
return;
}
for( let i = index; i < arr.length; i ++ ){
tmpArr.push( arr[i] ); // 进一个元素到tmpArr
dfs( arr, N, i, tmpArr, resArr ); // 从当前遍历到的i下标继续后续dfs调用
tmpArr.pop(); // 回溯
} // for i
}