【LeetCode】整数替换 Java 题解
题目描述
给定一个正整数 n ,你可以做如下操作:
如果 n 是偶数,则用 n / 2 替换 n 。如果 n 是奇数,则可以用 n + 1 或 n - 1 替换 n 。n 变为 1 所需的最小替换次数是多少?
复制代码
思路分析
今天的算法题目是整数替换题目,题干通俗易懂,简洁明了,需要求的最小替换次数。
这个题目很容易想到的思路就是枚举数值变换的每一种情况,然后比较求出最小的替换次数。常用的算法就是搜索 DFS。利用递归函数方便地实现暴力枚举的算法。该类搜索算法的特点在于,将要搜索的目标分成若干“层”,每层基于前几层的状态进行决策,直到达到目标状态。
根据题目,递归函数的终止条件是 n == 1,在这里比较最小的替换次数。对于每一层,分别按照 n 是偶数, 或者 n 是基数,分条件讨论写出代码。具体实现代码如下:
通过代码
复制代码
总结
上述代码的时间复杂度是 O(n),空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/78848e942b5408a3331a9bc4a】。文章转载请联系作者。
评论