列表

详情


1256. 加密数字

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

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

 

示例 1:

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

示例 2:

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

 

提示:

相似题目

负二进制转换

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string encode(int num) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 1.8 MB, 提交时间: 2023-10-21 19:57:42

func encode1(num int) string {
	return fmt.Sprintf("%b", num+1)[1:]
}


func encode(num int) string {
    if num == 0 {
        return ""
    }
    v := 1
    n := 0
    for num >= v {
        num -= v
        v <<= 1
        n++
    }

    str := strconv.FormatInt(int64(num), 2)
    return strings.Repeat("0", n - len(str)) + str
}

cpp 解法, 执行用时: 4 ms, 内存消耗: 6.6 MB, 提交时间: 2023-10-21 19:56:58

class Solution {
public:
    string check(int num){
        string res="";
        while(num>0){
            if(num&1){
                res="1"+res;
            }
            else{
                res="0"+res;
            }
            num>>=1;
        }
        return res;
    }
    string encode(int num) {
        string str=check(num+1);
        string temp=str.substr(1);
        return temp;
    }
    
    string encode2(int num) {
        int n = num + 1;
        string res  = "";
        while (n != 1) {     //最高位的1不要
            int x = n & 1;
            res += ('0' + x);
            n >>= 1;
        }
        reverse(res.begin(), res.end());
        return res;
    }
};

python3 解法, 执行用时: 44 ms, 内存消耗: 16 MB, 提交时间: 2023-10-21 19:56:08

class Solution:
    def encode(self, num: int) -> str:
        return bin(num+1)[3:]

java 解法, 执行用时: 0 ms, 内存消耗: 38.5 MB, 提交时间: 2023-10-21 19:55:45

class Solution {
    public String encode(int num) {
        return Integer.toBinaryString(num + 1).substring(1);
    }
    
    public String encode2(int num) {
        if (num == 0 ){
            return "";
        }
        String input = Integer.toBinaryString(num);
        StringBuilder allone = new StringBuilder();
        allone.append("1".repeat(input.length()));
        
        // 1, 11, 111,...
        StringBuilder ans = new StringBuilder();
        if (allone.toString().equals(input)) {
            return ans.append("0".repeat(input.length())).toString();
        }
        
        //minus
        String a = allone.substring(1);
        Integer allOneInt = Integer.valueOf(a, 2);
        String y = Integer.toBinaryString(num - allOneInt);
        // 01, 001, 010....
        return "0".repeat(Math.max(0, input.length() - y.length() - 1)) + y;
    }
}

上一题