LeetCodeGray Code



The gray code is a binary numeral system where two successive values differ in only one bit.
Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.
For example, given n = 2, return [0,1,3,2]. Its gray code sequence is:
00 - 0  01 - 1  11 - 3  10 - 2

When n=3:
000
001
011
010
110
111 
101
100
From: http://www.darrensunny.me/leetcode-gray-code/
We can construct a gray code sequence of length n using a gray code sequence of length n1 . Specifically, adding a preceding '0' to each of the numbers in binary format preserves the property that two successive values differ in only one bit. We do it and name the new sequence as s1. If we reverse the order of the numbers, and add a preceding '1' to each, the property is preserved as well.
public ArrayList<Integer> grayCode(int n) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if (n < 0)      // Invalid input
            return result;
        result.add(0);
        if (n == 0)     // No bit
            return result;
        result.add(1);  // With one bit
 
        // Iteratively contruct the grey code of n bits on that of n-1 bits
        // gc(n) = gc(n-1) ... gc'(n-1)+2^(n-1), where
        // gc'(n-1) means the reverse sequence of gc(n-1), and +2^(n-1) means adding
        // 2^(n-1) to each number in the sequence
        for (int i = 2; i <= n; i++) {
            int size = result.size();
            for (int j = size-1; j >= 0; j--)
                result.add(result.get(j)+(1<<(i-1)));
        }
 
        return result;
    }
vector<int> grayCode(int n)  
{  
  vector<int> ret;  
  int size = 1 << n;  
  for(int i = 0; i < size; ++i)  
ret.push_back((i >> 1)^i);  
  return ret;  
}
Also refer to http://www.darrensunny.me/leetcode-gray-code/
http://www.programering.com/a/MDO0kDMwATM.html
Read full article from 水中的鱼: [LeetCode] Gray Code 解题报告

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts