求解算法题

输入一个正整数。
如果可以整除2,则除以2;步骤加一
如果不能整除2,那么可以加一也可以减一;步骤加一
如此下去,用最少的步骤将这个数变成1
求最少的步骤数。

举例:输入15. 
第一步: 15+1 = 16
第二部: 16/2 = 8
第三步: 8/2 = 4
第四步: 4/2 = 2
第五步: 2/2 = 1
输出步骤数为5

希望有大佬能提供一个思路或提供一份伪代码。
#华为笔试#
全部评论
试试记忆化搜索能不能过吧. 初始化dp[1] = 0, 然后bfs、三种情况 + 1, -1 , * 2.  第一步 dp[2] = 1, dp[0] = 1(过滤掉), dp[2](已存在 不计算) 第二步 dp[3] = 2, dp[1]已存在, 不计算. dp[4] = 2. 第三步 dp[4]已存在不计算,dp[2]已存在 不计算, dp[6] = 3, dp[5] = 43 dp[3]已存在 不计算, dp[8] = 3. .....
点赞 回复 分享
发布于 2021-12-13 22:25

相关推荐

迷茫的大四🐶:价格这么低都能满了?
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务