假设我有一个字母'abcd'和最大字符串长度为3.这给我85 possible strings,包括空字符串。我想要做的是将范围[0,85)内的整数映射到字符串空间中的字符串,而不使用查找表。事情是这样的:将整数映射到给定字符串空间中的字符串
0 => ''
1 => 'a'
...
4 => 'd'
5 => 'aa'
6 => 'ab'
...
84 => 'ddd'
这是很简单的做,如果字符串是使用此伪算法固定长度:
str = ''
for i in 0..maxLen do
str += alphabet[i % alphabet.length]
i /= alphabet.length
done
我想不通,虽然做的不错的,有效的方法当字符串的长度可以在[0,3)范围内的任何位置。这将在随机输入的紧密循环中运行,所以我想避免任何不必要的分支或查找。
您的掌握所涉及的数学显然比我的要强很多,但这正是我所期待的;它完美地工作。非常感谢您的帮助。 – spencercw 2012-02-14 21:31:25