javaはロボットの運動範囲を計算します。


ロボットの動き範囲java版の具体的な内容は以下の通りです。
地上にはm行とn列の四角形があります。ロボットは座標0,0の格子から移動します。毎回左、右、上、下の4つの方向に1マスだけ移動できますが、行座標と列座標の数桁とkより大きい格子には入れません。例えば、kが18の場合、ロボットは方眼(35,37)に入ることができます。3+5+3+7=18です。しかし、方眼に入ることができません。3+5+3+8=19です。このロボットはいくつの格子に達することができますか?
問題解決の考え方:
1.現在位置が入場条件を満たしているかどうかを判断し、入場可能条件を満たしているなら、引き続きその周囲の上下左右の4つの位置を判断する(境界以外)。満足していない場合は、現在位置の選択エラーを説明します。
2.各試行において、訪問した位置を記録するためのフラグ配列を宣言します。
3.現在続けてみようとしている条件は3つあります。座標はマトリクス内の位置が合法的で、座標は入力可能条件を満たしています。座標位置はアクセスされていません。

public class Solution {
 public int movingCount(int threshold, int rows, int cols)
 {
  if(threshold<0 || rows<=0 || cols<=0){
   return 0;
  }
  int count = 0;
  boolean[] flag = new boolean[rows*cols];
  for(int i=0; i<rows*cols; i++){
   flag[i] = true;
  }
  count = Moving(threshold, 0, 0, rows, cols, flag);
  return count;
 }

 public int Moving(int t, int row, int col, int rows, int cols, boolean[] flag){
  int count = 0;
  if(isAllow(t, row, col, rows, cols, flag)){
   flag[row*cols+col] = false;
   count = 1+Moving(t, row-1, col, rows, cols, flag)+Moving(t, row, col-1, rows, cols, flag)+Moving(t, row+1, col, rows, cols, flag)+Moving(t, row, col+1, rows, cols, flag);
  }
  return count;
 }

 //        ,   threshold     
 public boolean isAllow(int t, int row, int col, int rows, int cols, boolean[] flag){
  if(row>rows ||row<0 || col>cols || col<0 || row*cols+col>rows*cols-1|| flag[row*cols+col]==false){
   return false;
  }
  int sum = 0;
  char[] chs = (row+"").toCharArray();
  char[] chs1= (col+"").toCharArray();
  for(char ch: chs){
   sum += Character.getNumericValue(ch);
  }
  for(char ch1: chs1){
   sum += Character.getNumericValue(ch1);
  }
  return sum<=t;
 }
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。