统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。

请注意,你可以假定字符串里不包括任何不可打印的字符。

示例:

输入: "Hello, my name is John"
输出: 5

上期的问题是:198,N叉树的层序遍历

 1private class Node {
2    public int val;
3    public List<Node> children;
4
5    public Node() {
6    }
7
8    public Node(int _val, List<Node> _children) {
9        val = _val;
10        children = _children;
11    }
12}

这是Node类,下面看一下算法

 1public List<List<Integer>> levelOrder(Node root) {
2    List<List<Integer>> res = new ArrayList<>();
3    if (root == nullreturn res;
4    Queue<Node> q = new LinkedList<>();
5    q.offer(root);
6    while (!q.isEmpty()) {
7        int size = q.size();
8        List<Integer> level = new ArrayList<>();
9        for (int i = 0; i < size; i++) {
10            Node tmp = q.poll();
11            level.add(tmp.val);
12            q.addAll(tmp.children);
13        }
14        res.add(level);
15    }
16    return res;
17}

解析:

这题很好理解,因为这里是n叉树,到底有几个子节点我们不知道,但是在Node节点中统一把他们放到了children中。如果是二叉树的话我们看下代码怎么写

 1 public List<List<Integer>> levelOrder(Node root) {//二叉树的遍历,不是这一题的。
2     List<List<Integer>> res = new ArrayList<>();
3     if (root == nullreturn res;
4     Queue<TreeNode> q = new LinkedList<>();
5     q.offer(root);
6     while (!q.isEmpty()) {
7         int size = q.size();
8         List<Integer> level = new ArrayList<>();
9         for (int i = 0; i < size; i++) {
10             TreeNode tmp = q.poll();
11             level.add(tmp.val);
12             if (tmp.left != null)
13                 q.offer(tmp.left);
14             if (tmp.right != null)
15                 q.offer(tmp.right);
16         }
17         res.add(level);
18     }
19     return res;
20 }}

上面的是二叉树的层序遍历,不是这一题的。我们再来看一次这题使用递归的方式该怎么解决,看下代码

 1public List<List<Integer>> levelOrder(Node root) {
2    return levelOrder(root, 0new ArrayList<>());
3}
4
5private List<List<Integer>> levelOrder(Node node, int level, List<List<Integer>> order) {
6    if (node == null) {
7        return order;
8    }
9    List<Integer> list = order.size() > level ? order.get(level) : new ArrayList<>();
10    list.add(node.val);
11    if (order.size() <= level) {
12        order.add(list);
13    }
14    for (Node n : node.children) {
15        levelOrder(n, level + 1, order);
16    }
17    return order;
18}