LeetCode[题解] 2864. 最大二进制奇数

简介: LeetCode[题解] 2864. 最大二进制奇数

题目

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

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

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

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

 

示例 1:

输入:s = "010"

输出:"001"

解释:因为字符串 s 中仅有一个 '1' ,其必须出现在最后一位上。所以答案是 "001" 。


示例 2:

输入:s = "0101"

输出:"1001"

解释:其中一个 '1' 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 "100" 。所以答案是 "1001" 。


 

提示:

  • 1 <= s.length <= 100
  • s 仅由 '0''1' 组成
  • s 中至少包含一个 '1'



题解

根据题目意思,我们可以知道实际上就是将一个随机的二进制字符串,通过随意改变0和1的位置使其变为最大的一个奇数二进制字符串。

根据二进制的特性,我们知道如果一个二进制数为 奇数 那么其 最低位一定为1 ,然后又要使其最大由于二进制中只有0和1,我们只要尽量的将1放在高位(j即二进制数的最前面)即可。由此,我们可以写出如下程序:

    public String maximumOddBinaryNumber(String s) {
        int len = s.length();
        int oneNum = 0;
        for (int i = 0; i < len; i++) {
            if (s.charAt(i) == '1') {
                oneNum ++;
            }
        }

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < oneNum - 1; i++) {
            result.append("1");
        }
        for (int i = 0; i < len - oneNum; i++) {
            result.append("0");
        }
        result.append("1");
        return result.toString();
    }
目录
相关文章
|
1月前
LeetCode 1550. 存在连续三个奇数的数组
LeetCode 1550. 存在连续三个奇数的数组
27 0
|
1月前
|
Java 编译器
LeetCode 190. 颠倒二进制位
LeetCode 190. 颠倒二进制位
23 0
【LeetCode-每日一题】-67. 二进制求和
【LeetCode-每日一题】-67. 二进制求和
|
4天前
|
算法
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
|
8天前
|
存储 SQL 算法
LeetCode题目67:二进制求和
LeetCode题目67:二进制求和
|
12天前
|
算法 Java Go
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
6 2
|
1月前
【力扣】67. 二进制求和
【力扣】67. 二进制求和
|
8月前
【Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位】
【Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位】
28 0
|
1月前
leetcode:190. 颠倒二进制位
leetcode:190. 颠倒二进制位
16 0
|
1月前
leetcode-1784:检查二进制字符串字段
leetcode-1784:检查二进制字符串字段
20 0