問題解決のアイデア:まず、現在のノードが空かどうかを判断し、空でない場合はパスに追加します。空でない場合は、ノードが葉ノードかどうかを確認します。葉ノードの場合は、回答にパスを追加します。それ以外の場合は、再帰的に左と右のサブツリーを続けます。
バイナリツリーを指定すると、ルートノードからリーフノードへのすべてのパスを返します。
説明:葉ノードとは、子ノードがないノードを指します。
例:
入力してください:
1
/ \
2 3
\
5出力:["1-> 2-> 5"、 "1-> 3"]
説明:すべてのルートノードからリーフノードへのパスは次のとおりです:1-> 2-> 5、1-> 3
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
LinkedList<String> paths = new LinkedList<>();
paths_ans(root,"",paths);
return paths;
}
public void paths_ans(TreeNode root,String path,LinkedList<String> paths){
if(root != null){
path += Integer.toString(root.val);
if(root.left == null && root.right == null){
paths.add(path);
}else{
path += "->";
paths_ans(root.left,path,paths);
paths_ans(root.right,path,paths);
}
}
}
}
問題解決のアイデア:まず、右下隅と左上隅の2つの固定点を見つけ、これらの2つの点の座標を終了条件として各円の要素を出力する必要があります。終了条件は、これら2つの点の対応する水平座標と垂直座標です。 。
問題の説明
n行m列のテーブルの場合、spiralメソッドを使用して、テーブルに正の整数を順に入力することができます。入力されたテーブルをスパイラル行列と呼びます。
たとえば、4行5列のらせん行列は次のとおりです
。1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8入力例
4 5
2 2出力例
15
package Test02;
import java.util.Scanner;
public class Work {
public static void main(String[] args) {
int[][] a = new int[1001][1001];
int n,m;
int c,r;
Scanner reader = new Scanner(System.in);
n = reader.nextInt();
m = reader.nextInt();
c = reader.nextInt();
r = reader.nextInt();
int row = 1, col = 1;
int num = 1;
int n2 = n, m2 = m;
while(row <= n && col <= m){
int x = row, y = col;
while(col <= m)
a[row][col++] = num++;
col--;row++;
while(row <= n)
a[row++][col] = num++;
row--;col--;
while(col >= y)
a[row][col--] = num++;
row--;col++;
while(row > x )
a[row--][col] = num++;
row++;col++;
n--;m--;
}
System.out.println(a[r][c]);
}
}