给定一个数n,求从$x$计算到$x^n$至少需要多少步,允许得到的各中间变量之间进行乘法和除法。
链接
题解
看到这道题,最开始想到的是快速幂的计算方法。但是快速幂计算其实是分为“计算过程数据”和“有效过程数据相乘”两部分构成的,步数不一定最少,而且,这道题目中允许除法的运算。所以不能将快速幂的计算方法的过程步骤作为最少步数的结果。
采用递归的方式进行搜索,由于具体的步数即深度不清楚,所以适合采用迭代加深搜索来做。同时将maxVal * pow(2, maxd - d)
与n的大小关系作为剪枝的条件。其中maxVal为当前中间变量构成的序列中的最大值。若上式的值仍小于n,那么在当前的深度限制下不可能达到n值,需要进行剪枝。
用位运算maxVal << maxd - d
的方式来代替maxVal * pow(2, maxd - d)
的运算方式有助于提升速度。
代码
1 | /* |