Codility每周一课:L1-Iterations(P1-1)

L1.png

P1.1 BinaryGap

Find longest sequence of zeros in binary representation of an integer.

  • P1.1 二进制间隙

在整数的二进制表示中查找最长的零序列

正整数N的二进制间隙就是在N的二进制表示中,由两端的1包围的连续的零的序列。

例如:

数字9的二进制表示为1001,其包含长度为2的二进制间隙;
数字529的二进制表示1000010001,其包含两个二进制间隙:
长度分别是3和4;数字20的二进制为10100,其包含1个长度为1的二进制间隙;
数字15具有二进制表示1111,不存在二进制间隙;
数字32具有二进制表示100000,也不存在并二进制间隙。

写一个函数:

def solution(N)

例如:

给定N = 1041,函数应返回5,因为N具有二进制表示10000010001,因此其最长二进制间隙的长度为5;
给定N = 32,函数应返回0,因为N具有二进制表示100000,不存在二进制间隙。

假定:

  1. N是[1,2,……, 2,147,483,647]中的整数;
  • 解题思路

利用迭代将十进制正整数转为二进制表示;

  • Python3代码
# -*- coding:utf-8 -*-
# &Author  AnFany
# Lesson 1:Iterations
# P 1.1 BinaryGap


def decimal_to_binary(N):
    """
    将十进制的正整数转为二进制表示
    :param N: 十进制的正整数
    :return: 二进制表示的字符串
    """
    binary = ''
    while N != 0:
        binary += str(N % 2)
        N = int(N / 2)
    return binary[::-1]


def solution(N):
    """
    在整数的二进制表示中查找最长的零序列
    :param N:1至2,147,483,647的整数
    :return: 最长的零序列的长度
    """
    binary_list = list(decimal_to_binary(N))
    if '0' not in binary_list:
        return 0
    elif binary_list.count('1') == 1:
        return 0
    else:
        first_1 = 0  # 前面1的位置
        max_length = 0  # 间隔长度
        for index, value in enumerate(binary_list):
            if value == '1':
                max_length = max(max_length, index-first_1-1)
                first_1 = index
        return max_length
  • 结果

image

image

点击获得更多编程练习题。欢迎Follow,感谢Star!!! 扫描关注微信公众号pythonfan,获取更多。

image

image

猜你喜欢

转载自blog.csdn.net/qq_32882309/article/details/86687336