解题思绪:先判断当前节点是否为空,不为空则加入路径中,若不为空,判断该节点是否为叶子节点,为叶子节点则将路径加入谜底,否则继续递归左右子树.

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例:

输入:

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);
        }
    }
    }
}

解题思绪:首先要找到两个定点,分别是右下角和左上角的点,然后以这两点的坐标为终止条件输出每一圈的元素,终止条件是这两点的对应的横纵坐标.

问题形貌
对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。
  例如,一个 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]);
}
}