[LeetCode]89. Gray Codejava

    xiaoxiao2021-03-25  130

    /**89. Gray Code * @param n * @return */ public List<Integer> grayCode(int n) { List<Integer> list = new ArrayList<Integer>(); int count = (int) Math.pow(2,n); int[] nums = new int[n]; if (n == 0) { list.add(0); return list; } for (int i = 0; i < count; i++) { int j = i; int k = n-1; while(j > 0) { nums[k--] = j%2; j = j/2; } int val = 0; j = 1; for(k = n-1; k > 0; k--) { nums[k] = nums[k]^nums[k-1]; val += nums[k]*j; j = j*2; } val += nums[0]*j; list.add(val); } return list; } //n=0时输出[0]

    改进:利用格雷码性质

    public List<Integer> grayCode1(int n) { List<Integer> gray = new ArrayList<Integer>(); for(int i = 0 ; i < 1<<n ; i++) { int temp = i>>1; gray.add(i^temp); } return gray; }
    转载请注明原文地址: https://ju.6miu.com/read-9981.html

    最新回复(0)