考虑到k只有不到100,可以暴力枚举出从小到大所有合法的字符串,取第k个。
更聪明点的递归。
当我们尝试填写长度为n的字符串的首字母时,无论首字母是什么,之后的n-1位都有pow(2,n-1)种填写方法。所以我们用k/pow(2,n-1)就可以确定此时的首字母ch应该是字母表的第几个。注意这里的k应该用0-index更为方便。比如k=0,那么ch应该就是'a',如果k=1,那么ch应该就是'b'.
但是我们还需要考虑到之前一位的制约。如果发现计算得到的ch比上一位字母要大,那么意味着当前字母基数应该加1。因为此位我们不能尝试和前面一样的字母,所以会少pow(2,n-1)的可能性。