zoukankan      html  css  js  c++  java
  • LeetCode 397. 整数替换

    题目内容:

    给定一个正整数 n,你可以做如下操作:
    
    1. 如果 n 是偶数,则用 n / 2替换 n。
    2. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n。
    n 变为 1 所需的最小替换次数是多少?
    
    示例 1:
    
    输入:
    8
    
    输出:
    3
    
    解释:
    8 -> 4 -> 2 -> 1
    示例 2:
    
    输入:
    7
    
    输出:
    4
    
    解释:
    7 -> 8 -> 4 -> 2 -> 1
    或
    7 -> 6 -> 3 -> 2 -> 1
    

     解题思路:

    1.按着输入的数是偶数还是奇数分类讨论
    2.如果是偶数的话就直接减半
    3.如果是奇数的话,就需要判断这个数是加一还是减一。
    4.具体是加一还是减一的判断原则是这个数的在经过操作以后能不能尽量多的倍2整除,也就是说将这个数转成二进制的话,其末尾的两位数是否是“11”或者“01”,如果是“11”的话(注意这里要排除3这个数),让其加一这样就能够实现两次除法,如果是“01”的话,就将其减一。
    

    具体的实现代码如下:

    Python3实现代码:

    class Solution:
        def integerReplacement(self, n):
            """
            :type n: int
            :rtype: int
            """
            time = 0
            while n > 1:
                if n%2==0:
                    n = n//2
                else:
                    if bin(n)[-2:] == "11" and n !=3:
                        n+=1
                    elif bin(n)[-1:] == "1":
                        n-=1
                time += 1
            return time

    提交结果:

  • 相关阅读:
    Log4Net使用
    4月博文
    论坛题目练习
    职场冷笑话两则
    初识管理的一些心得
    Project中分清楚挣值项
    预留规划项
    小感触
    好事多磨,好事成双
    忧郁
  • 原文地址:https://www.cnblogs.com/andingding-blog/p/10222724.html
Copyright © 2011-2022 走看看