Enumerate all possible decimal strings of length n.
DFS Recursive divide-and-conquer
/*
Time Complexity - O(n * 10^n)
Space Complexity - O(n). Height of tree or length of prefix of partial slate which increases with depth.
*/
function decimalStrings(n) {
if (n < 1) return []
const result = []
dsHelper('', n)
return result
function dsHelper(slate, n) {
if (n === 0) result.push(slate)
else {
for (let i = 0; i < 10; i++) {
dsHelper(slate + `${i}`, n - 1)
}
}
}
}
Tests:
// Tests
const tests = [
[1, ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']],
[0, []],
[
2,
[
'00',
'01',
'02',
'03',
'04',
'05',
'06',
'07',
'08',
'09',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'19',
'20',
'21',
'22',
'23',
'24',
'25',
'26',
'27',
'28',
'29',
'30',
'31',
'32',
'33',
'34',
'35',
'36',
'37',
'38',
'39',
'40',
'41',
'42',
'43',
'44',
'45',
'46',
'47',
'48',
'49',
'50',
'51',
'52',
'53',
'54',
'55',
'56',
'57',
'58',
'59',
'60',
'61',
'62',
'63',
'64',
'65',
'66',
'67',
'68',
'69',
'70',
'71',
'72',
'73',
'74',
'75',
'76',
'77',
'78',
'79',
'80',
'81',
'82',
'83',
'84',
'85',
'86',
'87',
'88',
'89',
'90',
'91',
'92',
'93',
'94',
'95',
'96',
'97',
'98',
'99',
],
],
]
console.log('Recursive divide-and-conquer')
for (const test of tests) {
const res = decimalStrings(test[0])
console.log(res)
console.log(JSON.stringify(res) === JSON.stringify(test[1]))
}