给出两个锯齿状数组:a&b其中a + b将始终具有相同的行数:
int[][] a = { {1,2}, {4,5,6} };
int[][] b = { {7}, {8,9,0} };
Run Code Online (Sandbox Code Playgroud)
我怎样才能操纵一个新的锯齿状数组c返回:
{ {1,2,7}, {4,5,6,8,9,0} }?
这是我到目前为止所拥有的:
int[][] c = null;
for(int i = 0; i<a.length; i++){
c = new int[a.length][a[i].length + b[i].length];
}
//rest of my code for assigning the values into the appropriate position works.
Run Code Online (Sandbox Code Playgroud)
正如你们所看到的那样,麻烦出现了,我正在执行一个深层复制,在for循环的第二次迭代中,它将所有行设置为迭代步骤中当前行长度的长度.
这是CFG:
S -> T | V
T -> UU
U -> aUb | ab
V -> aVb | aWb
W -> bWa | ba
Run Code Online (Sandbox Code Playgroud)
所以这将接受某种形式的:
{a^n b^n a^m b^m | n,m >= 1} U {a^n b^m a^m b^n | n,m >= 1}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
in_lang([]).
in_lang(L) :-
mapS(L), !.
mapS(L) :-
mapT(L) ; mapV(L),!.
mapT(L) :-
append(L1, mapU(L), L), mapU(L1), !.
mapU([a|T]) :-
((append(L1,[b],T), mapU(L1)) ; (T = b)),!.
mapV([a|T]) :-
((append(L1,[b],T), mapV(L1)) ;
(append(L1,[b],T), mapW(L1))),
!.
mapW([b|T]) :-
((append(L1,[a],T), mapW(L1)) …Run Code Online (Sandbox Code Playgroud)