我在准备考试时遇到了以下问题:
想象一个单词的字母表。例子:
a ==> 1
b ==> 2
c ==> 3
...
z ==> 26
ab ==> 27
ac ==> 28
...
az ==> 51
bc ==> 52
and so on.
字符序列只需要按升序排列(即“ab”有效但“ba”无效)。
问题:给定任何单词,如果有效则打印其索引,否则打印 0。
Input Output
ab 27
ba 0
aez 441
任何有关如何解决此问题的指示将不胜感激。
我在准备考试时遇到了以下问题:
想象一个单词的字母表。例子:
a ==> 1
b ==> 2
c ==> 3
...
z ==> 26
ab ==> 27
ac ==> 28
...
az ==> 51
bc ==> 52
and so on.
字符序列只需要按升序排列(即“ab”有效但“ba”无效)。
问题:给定任何单词,如果有效则打印其索引,否则打印 0。
Input Output
ab 27
ba 0
aez 441
任何有关如何解决此问题的指示将不胜感激。
让我给你一些提示:
k
吗?k
和一个字母l
。它们以多少字k
开头l
?提示:帕斯卡三角形。如果您需要更多提示,http ://en.wikipedia.org/wiki/Combinadic可以提供帮助。如果您需要一些实现,您可以从(Python 语言)中定义的 rank 函数中获得灵感https://github.com/sagemath/sagelib/blob/master/sage/combinat/choose_nk.py
公平地说,我没有提到如何计算指数值的算法,只是退出案例。但它为您提供了一个正确方向的开始,并且计算指数将遵循相同的框架。
更多信息:
从第一个字母开始向上数。当您点击“z”时,重置为下一个有效字符串并继续计数 - >“aa”失败不要计算它。添加到下一个,这里是“ab”。一旦你点击“az”,尝试“ba” - 失败,继续添加字母,直到你得到一个有效的字符串“bc”并重新开始计数。它就像一个向上计数的里程表。
该死的慢,但它应该可以工作,因为它是您手动执行的操作以获得答案。
顺便说一句,@hivert 暗示了一个更优雅的解决方案,几乎可以立即计算......