0
点赞
收藏
分享

微信扫一扫

89. 格雷编码/1046. 最后一块石头的重量

这题咱上来就是一个模拟,我知道题解肯定用位运算,但无奈不会啊,难受。记录一下我的笨比模拟思路(java用时41ms,真的慢),然后老老实实学位运算。

思路:

代码:

class Solution {
    public List<Integer> grayCode(int n) {
        List<Integer> ans = new ArrayList<>();
        List<StringBuilder> list = new ArrayList<>();
        list.add(new StringBuilder().append(0));
        list.add(new StringBuilder().append(1));
        for (int i = 2; i <= n ; i++) {
            int len = list.size();
            //before + 0
            for (int j = 0; j < len; j++) {
                StringBuilder b = new StringBuilder();
                b.append(0);
                b.append(list.get(j));
                list.add(b);
            }
            //after + 1
            for (int j = len-1; j >=0; j--) {
                StringBuilder b = new StringBuilder();
                b.append(1);
                b.append(list.get(j));
                list.add(b);
            }
            list = list.subList(len,list.size());
        }
        for (StringBuilder stringBuilder : list) {
            ans.add(Integer.parseInt(stringBuilder.toString(),2));
        }
        return ans;
    }
}

下面是官方题解的代码,我依然看不懂这是怎么操作的,感觉写的公式跟实际操作没什么关系啊。不过代码也不长,背它!

class Solution {
    public List<Integer> grayCode(int n) {
        List<Integer> ret = new ArrayList<Integer>();
        for (int i = 0; i < 1 << n; i++) {
            ret.add((i >> 1) ^ i);
        }
        return ret;
    }
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/gray-code/solution/ge-lei-bian-ma-by-leetcode-solution-cqi7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

还是模拟,我突然发现我做题的第一反应就是先模拟,只要能靠模拟写出来,那我大脑中优先跳出来的方法就是模拟,emm,这是思维僵化了嘛~

思路:

代码:

class Solution {
    public int lastStoneWeight(int[] stones) {
        List<Integer> list = new ArrayList<>();
        for (int i : stones){
            list.add(i);
        }
        Collections.sort(list);
        int len = list.size();
        while(len>=2){
            int x = list.get(len-2),y = list.get(len-1);
            list.remove(len-1);
            if (x == y){
                list.remove(len-2);
            }else {
                list.set(len-2,y-x);
            }
            Collections.sort(list);
            len = list.size();
        }
        return len == 1 ? list.get(0) : 0;
    }
}
举报

相关推荐

0 条评论