最大二进制奇数

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

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

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

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

示例 1:

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

示例 2:

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

题目很简单,先数出字符串中1的个数count,把11放在最后,其余count-11放在最前面。

这是我写的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

class Solution {
public:
string maximumOddBinaryNumber(string s) {
int n=s.size()-1;
int count=0;
for(int i=0;i<=n;i++) count+=(s[i]-'0');
string ans="";
ans.resize(n+1);
for(int i=0;i<=n;i++) ans[i] = '0';
ans[n]='1';
for(int i=0;i<count-1;i++) ans[i]='1';
return ans;
}
};



这是题解写的

1
2
3
4
5
6
7
class Solution {
public:
string maximumOddBinaryNumber(string s) {
int cnt = count(s.begin(), s.end(), '1');
return string(cnt - 1, '1') + string(s.length() - cnt, '0') + '1';
}
};

又学到一个新函数

1
2
3
4
5
6
7
8
9
template <class InputIt, class T>
size_t count(InputIt first, InputIt last, const T& value);

-------------------------------------------------------------

std::vector<int> nums = {1, 2, 3, 4, 5, 2, 3, 2};
int target = 2;

size_t count = std::count(nums.begin(), nums.end(), target);