题目描述:
提示:
1 <= label <= 10^6
我的写法比较生硬,直接用list存放所有的层,然后进行遍历寻找
代码:
class Solution {
public static List<Integer> pathInZigZagTree(int label) {
List<Integer> list = new ArrayList<>();
// 存放每一层的路径
List<List<Integer>> temlist = new ArrayList<>();
int start = 1;
int n = 1;
boolean odd = false;
while (start <= label) {
List<Integer> tem = new ArrayList<>();
for (int i = 0; i < n; i++) {
tem.add(start ++);
}
n *= 2;
if(odd){
Collections.reverse(tem);
}
odd = !odd;
temlist.add(tem);
}
int index = find(label, temlist.get(temlist.size() - 1));
int size = temlist.size();
for (int i = size - 1; i >= 0; i--) {
list.add(0, temlist.get(i).get(index));
index /= 2;
}
return list;
}
public static int find(int num,List<Integer> list){
for (int i = 0; i < list.size(); i++) {
if(list.get(i) == num){
return i;
}
}
return -1;
}
}