文法におけるK番目のシンボル

最初の行では、我々は書きます  0今、すべての次の行に、我々は前の行を見て、それぞれの出現置き換える  0 と  01、そしてそれぞれの出現  1 とを  10

行所定の  N インデックス  K、戻り  K列に番目のインデックス付け記号  N(の値が  K 1のインデックス付きである。)(1索引付け)。

例:
 入力:N = 1、K = 1つの
 出力:0 入力:N = 2、K = 1つの 出力:0 入力:N = 2、K = 2 出力:1つの入力:N = 4、K = 5 出力:1 説明:行1:0行2:01行3:0110行4:01101001







ノードが0である場合、全体の構造は、その二人の子供のノードが、0と1であり、バイナリツリーを見ることができる
二人の子供のノードが1と0であり、ノードが1の場合、同様に
我々は、Kの位置であるか否かを知ることができます左ノードまたは2を分割して右ノード
Kが偶数の場合は、現在のノードが右の子であり、その親が前行のノード目(K / 2)です。
Kが奇数の他の場合、現在のノードが子を残しており、その親は、前の行のノード目((K + 1)/ 2)です。
現在のノードの値は、その親ノードの値を知らなくても、その親ノードに依存して
、我々はまだ現在のノードの値を決定することはできません。
それは我々が再帰を必要とする理由、我々は最初の行に到達するまで、親ノードを見つけるために、前の行を続けるのです。
そして、すべての親ノード値は、再帰関数が戻った後に決定されます。

クラス解決{
 パブリックINT kthGrammar(INT N、INT K){
     場合(N == 1戻り 0 ;
    もし(K%2 == 0リターン(kthGrammar(N - 1、K / 2)== 0)?10 他の リターン(kthGrammar(N - 1、(K + 1)/ 2)== 0)?01; 
    } 
}。
 

 

 

おすすめ

転載: www.cnblogs.com/250101249-sxy/p/11494395.html