场景回顾:前两天群里有同学在讨论这样一个问题,说是遇到了一个数据结构面试题,打印从a到z, 如 a 到 ab,再到az, 再到azzz 的字符串(其实这并不准确,除非他真的要解决排列组合问题,或者是在26进制的基础上做了什么变化)。当时我是觉得这位同学没有说清楚,于是在群里我问了这样几个问题:
1. 这是一个要解决26进制的问题吗?
2. 每次只加一吗?
3. 打印的时候传什么参数,如传入N,是要把该过程中每次加1的数都打印出来呢,还是最打印最后一个结果?
从交流中可以看出,该同学对这个问题没有理解清楚。可以想象,如果这是一道面试题,他和面试官的沟通估计够呛了。严格来说,该题和数据结构无关。如果面试官问到了,其实是它想考查我们的代码功底怎么样。我们一块来澄清一下这个问题,然后我们再来分析如何解决这个问题。
重新定义问题: 请利用小写字母a-z表示一个二十六进制数,输入一个N,请帮我求出这个数的表示,或者帮我从控制台打印从0到N所表示的所有数。
分析问题:
1. 二十六进制的数,每位数的权重是26的W次方
2. 二十六进制的数里有26个数值,即从a,b,.., 到z
3. 分析重要的边界调价:
=> 一位数, a,b, c, ... z 表示从0-25, 最大的一位数是z
=> 二位数, ba-zz, 最小的二位数是 ba, 最大的二位数是 zz