用C ++编码数字
假设我们有一个非负整数n,我们必须找到它的编码形式。编码策略如下-
01234567因此,如果数字为23,则结果为1000,如果数字为54,则结果为10111
为了解决这个问题,我们将遵循以下步骤-
创建一个称为bin的方法,它将取n和k,该方法的行为如下
res:=空字符串
当n>0时
res:=res+nmod2的数字
n:=n/2
反转数字res
而x>res的长度
res:=用res前缀0
返回资源
实际的方法如下-
如果n=0,则返回空字符串;如果n为1,则返回“0”;或者,当n为2时,则返回“1”
x:=logn以2为底
如果2^(x+1)–1=n,则
ans:=空字符串
x增加1
当x不为0时,则ans:=将ans附加在0后面,并将x增加1
返回ans
返回bin(n–2^x+1,x)
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string bin(int n, int x){
string result = "";
while(n>0){
result += (n%2) + '0';
n/=2;
}
reverse(result.begin(), result.end());
while(x>result.size())result = '0' + result;
return result;
}
string encode(int n) {
if(n == 0)return "";
if(n == 1)return "0";
if(n==2) return "1";
int x = log2(n);
if(((1<<(x+1)) - 1) == n){
string ans = "";
x++;
while(x--)ans+="0";
return ans;
}
return bin(n - (1<<x) + 1, x);
}
};
main(){
Solution ob;
cout << (ob.encode(23)) << endl;
cout << (ob.encode(56)) << endl;
}输入值
23 54
输出结果
1000 11001