跳转至

1256. 加密数字 🔒

题目描述

给你一个非负整数 num ,返回它的「加密字符串」。

加密的过程是把一个整数用某个未知函数进行转化,你需要从下表推测出该转化函数:

 

示例 1:

输入:num = 23
输出:"1000"

示例 2:

输入:num = 107
输出:"101100"

 

提示:

  • 0 <= num <= 10^9

解法

方法一:位运算

我们将 $num$ 加一,然后将其转换为二进制字符串,去掉最高位的 $1$ 即可。

时间复杂度 $O(\log n)$,空间复杂度 $O(\log n)$。其中 $n$ 为 $num$ 的大小。

1
2
3
class Solution:
    def encode(self, num: int) -> str:
        return bin(num + 1)[3:]
1
2
3
4
5
class Solution {
    public String encode(int num) {
        return Integer.toBinaryString(num + 1).substring(1);
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Solution {
public:
    string encode(int num) {
        bitset<32> bs(++num);
        string ans = bs.to_string();
        int i = 0;
        while (ans[i] == '0') {
            ++i;
        }
        return ans.substr(i + 1);
    }
};
1
2
3
4
5
func encode(num int) string {
    num++
    s := strconv.FormatInt(int64(num), 2)
    return s[1:]
}
1
2
3
4
5
function encode(num: number): string {
    ++num;
    let s = num.toString(2);
    return s.slice(1);
}

评论