这道题用的是比较简朴的方法做的.说白了就是暴力。
思路:首先,s中至少有一个1,而且我们重新排序后必须是奇数,这样的话,其中一个1必定会在最后一位上,这是由二进制的性质决定的,因为从右到左数起,第一位是pow(2,0),其他位都是偶数,再怎么加都是偶数,所以只有第一位是奇数,所以必须有一个1是在最后一位的。
根据这个逻辑,我的思路是,我们不知道有多少个1,所以需要有个计数的count,直接for循环遍历就行,然后一边计数,一边存储往我们的buf用来存储1,这样的话buf的最前面几位都是1了,其他位就都是0了,那么我们只需要把buf中位置最靠右的那个1挪到最后一位就行了,刚刚哪一位就是变成了0。
上代码:
class Solution {
public:string maximumOddBinaryNumber(string s) {int n=s.size();string buf;int count=0;for(int i=0;i<n;i++){if(s[i]=='1'){buf+=s[i];count++;}}for(int i=0;i<n-count;i++){buf+='0';}buf[count-1]='0';buf[n-1]='1';return buf;}
};