求解算法题

输入一个正整数。
如果可以整除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

相关推荐

震撼沃玛一整年:查看图片
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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