初学python记录:力扣2864. 最大二进制奇数

题目:

给你一个 二进制 字符串 s ,其中至少包含一个 '1' 。

你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。

以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。

注意 返回的结果字符串 可以 含前导零。

想法:

简单题之所以被称之为简单题是有道理的(doge),今天每日一题真的好简单啊嘎嘎嘎,

1.因为要是奇数,所以返回的字符串末尾必为1。

2.将原字符串中的所有‘1’刨除掉要放到末尾的那一个外,全部放到字符串开端,中间全是‘0’。

代码如下:

class Solution(object):
    def maximumOddBinaryNumber(self, s):
        """
        :type s: str
        :rtype: str
        """
        n = len(s)
        count = 0   # 计数器,统计'1'的个数
        for i in range(0, n):
            if s[i] == '1':
                count += 1
        a = '1'*(count-1) + '0'*(n-count) + '1'
        return a

提交通过:

 然后去看了一眼官方题解,原来python里可以直接用count()函数统计字符串里某个字符的个数!!所以用来统计‘1’的循环也可以省掉了,代码如下:

class Solution(object):
    def maximumOddBinaryNumber(self, s):
        """
        :type s: str
        :rtype: str
        """
        n = len(s)
        count = s.count('1')
        a = '1'*(count-1) + '0'*(n-count) + '1'
        return a

提交通过,小小的提升了一下时间和空间: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值