17.电话中的数字字母转换
2019-05-09 本文已影响0人
New_Learner
给定包含2-9的数字字符串,利用电话来转换成可能对应的字符串。
思路1:建立2-9的转换表。利用查询的操作分别转换。但是这对于n个数字而言复杂度至少也是3^n,指数级的复杂度是无法接受的。
思路2:利用递归的思路。这里其实很难设计,主要是由于向量操作中,既要改变原先的值,又要增加内容。为了避免该情况,对递归的设计应当只在停止时才输出向量,这样递归函数的返回值就必须得是void ,向量要利用形参的引用来传递。所以递归函数的形参应当有1.字符串,2.为了确定递归内容的指向现在字符的指针,3.上次递归的结果,4.输出向量。实际上这也是一个复杂度较高的算法,因为这是一个带有循环的递归,每趟递归至少会指向三次获以上的下层。并不能改善复杂度。
本题的复杂度是显然存在下界的,3^n的下界无法突破。从逻辑思考上也可以推出,输出的个数至少3^n个。
