最大二进制奇数
给你一个 二进制 字符串 s ,其中至少包含一个 '1' 。
你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。
以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。
注意 返回的结果字符串 可以 含前导零。
示例 1:
| 12
 3
 
 | 输入:s = "010"输出:"001"
 解释:因为字符串 s 中仅有一个 '1' ,其必须出现在最后一位上。所以答案是 "001" 。
 
 | 
示例 2:
| 12
 3
 
 | 输入:s = "0101"输出:"1001"
 解释:其中一个 '1' 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 "100" 。所以答案是 "1001" 。
 
 | 
题目很简单,先数出字符串中1的个数count,把1个1放在最后,其余count-1个1放在最前面。
这是我写的
| 12
 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;
 }
 };
 
 
 
 | 
这是题解写的
| 12
 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';
 }
 };
 
 | 
又学到一个新函数
| 12
 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);
 
 |