题解 | #统计每个月兔子的总数#
统计每个月兔子的总数
https://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int mounth = in.nextInt(); TreeNode tree = new TreeNode(); tree.setValue(1); TreeNode treeNode = createTree(mounth, mounth, tree); int count = countNum(treeNode, 0); System.out.println(count); } } public static TreeNode createTree(int mounth, int initMounth, TreeNode tree) { TreeNode leftNode = new TreeNode(); TreeNode righttNode = new TreeNode(); int n = initMounth - mounth; if (n == initMounth - 1) { return tree; } if (tree.getValue() != 0) { leftNode.setValue(0); } else { leftNode.setValue(1); } if (n > 0 && tree.getValue() != 0) { righttNode.setValue(1); tree.setRightNode(createTree(mounth - 1, initMounth, righttNode)); } tree.setLeftNode(createTree(mounth - 1, initMounth, leftNode)); return tree; } public static int countNum(TreeNode tree, int count) { if (tree.getValue() == 1) count++; if (tree.getLeftNode() != null) { count = countNum(tree.getLeftNode(), count); } if (tree.getRightNode() != null) { count = countNum(tree.getRightNode(), count); } return count; } } class TreeNode { private int value; private TreeNode leftNode; private TreeNode righttNode; public TreeNode() { this.leftNode = null; this.righttNode = null; this.value = 0; } public TreeNode(TreeNode leftNode, TreeNode righttNode, int value) { this.leftNode = leftNode; this.righttNode = righttNode; this.value = value; } public TreeNode getLeftNode() { return this.leftNode; } public TreeNode getRightNode() { return this.righttNode; } public int getValue() { return this.value; } public void setLeftNode(TreeNode leftNode) { this.leftNode = leftNode; } public void setRightNode(TreeNode righttNode) { this.righttNode = righttNode; } public void setValue(int value) { this.value = value; } } /** */
将空间与时间复杂的拉满的奇怪解法