讨论/题目交流/🐱 第 24 场夜喵双周赛/
🐱 第 24 场夜喵双周赛
展开讨论
力扣 (LeetCode)发起于 2020-04-18
最近编辑于 2020-04-18

分享个第三题的奇怪思路吧
一开始没注意数据范围 不敢爆搜
然后发现除了第一个是abc 其他的位置其实只有两个选项
那其实就和二进制一样
所以把第一位处理了以后
后面的就按k值的二进制计算 比如前一位是a 当前位是0就是小的那个b 1就是大的那个c

代码很乱 真是抱歉

public String getHappyString(int n, int k) {
        if (n==0){
            return "";
        }
        int sum =3 ;
        int t = n-1;
        int p =1;
        for (int i =1;i<=t;i++){
            p=p*2;
        }
        sum = sum*p;
        if (sum<k){
            return "";
        }
        StringBuilder sb = new StringBuilder();
        char now;
        if (k<=p){
            sb.append('a');
            now = 'a';
            k = k-1;
        } else if (k<=p*2){
            sb.append('b');
            now = 'b';
            k = k-p-1;
        } else {
            sb.append('c');
            now = 'c';
            k = k-2*p-1;
        }
        p = p/2;
        while (p>=1){
            if ((k&p)==p){
                if (now=='a'){
                    sb.append('c');
                    now= 'c';
                } else if (now=='b'){
                    sb.append('c');
                    now= 'c';
                } else {
                    sb.append('b');
                    now= 'b';
                }
            } else {
                if (now=='a'){
                    sb.append('b');
                    now= 'b';
                } else if (now=='b'){
                    sb.append('a');
                    now= 'a';
                } else {
                    sb.append('a');
                    now= 'a';
                }
            }
            p = p/2;
        }
        return sb.toString();

    }
1
展开全部 32 讨论