首页 > 试题广场 >

二进制取反

[编程题]二进制取反
  • 热度指数:3905 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

有一个二进制字符串,可以选择该串中的任意一段区间进行取反(可以进行一次或不进行),取反指将变为,将变为。那么取反之后的可能的最大的字典序是多少呢。如有,将区间取反变为是字典序最大的。

示例1

输入

"1000"

输出

"1111"

说明

如题意描述。
示例2

输入

"1001"

输出

"1111"

说明

对区间[num_2,num_3]取反能使得字典序最大。    

备注:
num的长度不超过1000。
char* maxLexicographical(char* num ) {
    // write code here
    int i = 0;
    while (num[i]) {
        if (num[i] == '0') {
            num[i] = '1';
            if (num[i + 1] != '0')
                break;
        }
        i++;
    }
    return num;

}

发表于 2022-09-22 21:34:34 回复(0)
char* maxLexicographical(char* num ) 
{
    // write code here
    int i=0;
    while(num[i]=='1') i++;
    while(num[i]=='0') num[i++]='1';
    return num;
}
发表于 2022-08-06 16:05:30 回复(0)