专业的编程技术博客社区

网站首页 > 博客文章 正文

Python第132题:二进制转换最小转换次数【PythonTip题库300题】

baijin 2024-08-17 10:55:13 博客文章 5 ℃ 0 评论

1、编程试题:

编写一个程序,找出将二进制字符串转换为01交替二进制字符串所需的最少转换次数。

转换定义0变为1或1变为0。

定义函数min_swaps_binary(),该函数接受一个二进制字符串作为参数。

在函数内计算将给定的二进制字符串变为为0和1交替出现的字符串所需的最少转换次数。

比如:

100只需要转换1次就可以变成101,所以返回1,即第3位的0变为1

10101不需要转换,所以返回0;01也不需要转换,所以返回0

0110 需要转换2次变为0101,所以返回2,第三位的1变为0,第四位的0变为1

示例输入

1100101

示例输出

2

解释:

将二进制字符串1100101转换为交替的二进制字符串所需的最少转换次数为2。

转换是当前位置的0变为1或者1变为0,最终的结果是0和1交替出现。

可以0开头,也可以1开头,所以需要计算两种情况下的最少转换次数,取最小值。

2、代码实现:

可编辑代码如下:

#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024 , Inc. All Rights Reserved
#
# @Time      : 2024/3/2 19:39
# @Author    : fangel
# @FileName  : 132. 二进制01转换最小转换次数.py
# @Software  : PyCharm

def min_swaps_binary(binary):
    count1=0
    #count2计数适用于将第一个字符从0改为1的场景
    count2=1
    count3=0
    # count4计数适用于将第一个字符从1改为0的场景
    count4=1
    # 第一个字符以0开头,需要考虑两种情况,是0或者改成1
    if binary[0] == "0":
        # 第一个字符是0的情况
        for i in range(1,len(binary)):
            if(i % 2 == 1) and binary[i] != "1":
                count1 += 1
            elif (i % 2 == 0) and binary[i] != "0":
                count1 += 1
        # 第一个字符改为1的情况
        for i in range(1,len(binary)):
            if(i % 2 == 1) and binary[i] != "0":
                count2 += 1
            elif (i % 2 == 0) and binary[i] != "1":
                count2 += 1
        return min(count1,count2)
    #第一个字符以1开头,需要考虑两种情况,是1或者改成0
    else:
        #第一个字符是1的情况
        for i in range(1, len(binary)):
            if (i % 2 == 1) and binary[i] != "0":
                count3 += 1
            elif (i % 2 == 0) and binary[i] != "1":
                count3 += 1
        #将第一个字符改为0的情况
        for i in range(1, len(binary)):
            if (i % 2 == 1) and binary[i] != "1":
                count4 += 1
            elif (i % 2 == 0) and binary[i] != "0":
                count4 += 1
        return min(count3, count4)

# 输入二进制字符串
binary = input()
# 输出最少转换次数
print(min_swaps_binary(binary))

3、代码分析:

本例需要考虑如下两种情况:第一个字符以0开头,需要考虑两种情况,是0或者改成1;第一个字符以1开头,需要考虑两种情况,是1或者改成0

4、运行结果:

输入:

10101

输出:

0

输入:

100010

输出:

1

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表