华为OD b卷 200分题目 评论转换输出
考试的时候想用递归,没递归出来,考完又想了想,直接循环 + 栈搞定了
子评论个数不为零就把子评论数入栈,同时Level+1,出栈时需要注意可能一次减少不止一个Level
考完写的代码,不保证通过,只通过了测试用例,仅供参考
public class Test { public static void main(String[] args) { Scanner in = new Scanner(System.in); // String line = in.nextLine(); // String line = "hello,2,ok,0,bye,0,test,0,one,1,two,1,a,0"; String line = "A,3,B,2,C,0,D,1,E,0,F,1,G,0,H,1,I,1,J,0,K,1,L,0,M,2,N,0,0,1,P,0"; String[] split = line.split(","); String[] strArr = new String[split.length / 2]; int[] intArr = new int[split.length / 2]; for (int i = 0; i < split.length / 2; i++) { strArr[i] = split[i * 2]; intArr[i] = Integer.valueOf(split[i * 2 + 1]); } // 按层级放入list List<List<String>> list = new ArrayList<>(); int level = 0; Stack<Integer> stack = new Stack<>(); for (int i = 0; i < strArr.length; i++) { if (level + 1 > list.size()) { list.add(new ArrayList<>()); } list.get(level).add(strArr[i]); if (stack.size() > 0) { int pop = stack.pop(); pop--; stack.push(pop); } if (intArr[i] == 0) { int peek = stack.size() > 0 ? stack.peek() : -1; while (peek == 0 && stack.size() > 0) { stack.pop(); level--; peek = stack.size() > 0 ? stack.peek() : -1; } } else { stack.push(intArr[i]); level++; } } System.out.println(list.size()); for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.get(i).size(); j++) { System.out.print(list.get(i).get(j) + " "); } System.out.println(); } } }#华为机试##华为OD#