パブリック クラスMoveCount { 公共 のint(MoveCount INT K、INT M、INT {N-) ブール [] []内のフラグ= 新しい新しい ブール[M] [N-]; int型 COUNT = MoveCountCore(K、M、N - 、0,0 、のフラグ); 戻りCOUNT; } プライベート INT MoveCountCore(int型 K、INT M、INT N-、INT I、INT J、ブール[] []内のフラグ){ // 復帰条件は、0を満たしていない IF(I <0 || J <0 || J> = N || I> = M ||和(String.valueOf(I))+ SUM(String.valueOf(J))> K ||フラグ[i]は[J] == trueに){ 戻り 0 ; } フラグに[I] [J] = trueに; // 条件の残りの4つの正方形を算出する場合が成立していると➕1 リターン 1 + MoveCountCore(K、M、N - 、I 1 +、J、内のフラグ)+ MoveCountCore(K、M、N- ,. 1-I、J、内のフラグ)+ MoveCountCore(K、M、N - 、I、J -1のフラグ)+ MoveCountCore(K、M、N - 、 I、J + 1 フラグに、); } / * 各デジタル数の合計を算出 * / プライベート INT 和(文字列S){ INT = 0合計を、 ため(INTI <s.length(); iが0 = I ++ ){ 合計 + = s.charAt(I) - '0' 。 } 戻り値の和。 } パブリック 静的 ボイドメイン(文字列[]引数){ } }