题解 | #蛇形矩阵#
蛇形矩阵
http://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
例如,当输入5时,应该输出的三角形为:
可分析出
1.每一行的数字比"后面一行"即上一行对应下标的后一个数字小1. 比如2比3小1,5比6小1.
那么只要知道第一行的数字 就可以得出第2行、第3行的数据了。第一行的数据可以找到规律依次递增 2 3 4 5 (到5就停了,这里的5等于输入的n)
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
import java.util.*; public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
List<List<Integer>> list =new ArrayList();
// 由分析可得 第一行数字从1到3需+2, 从3到6需加3,从6到10需+4... 一直加到n=5 --》得到15 最后一个数字
int index = 1;
List<Integer> firstList = new ArrayList();
int addNum = 0;
while(index<=n){
addNum = addNum+index;
firstList.add(addNum);
index++;
}
list.add(firstList);
for(int i=1;i<n;i++){
List<Integer> subList = new ArrayList();
// 循环放入
List<Integer> preList = list.get(i-1);
for(int k =1;k<preList.size();k++){
// 新的一行的某个元素 = 上一行的元素的后一个 -1
subList.add(preList.get(k)-1);
}
list.add(subList);
}
// 循环输出
for(int i=0;i<list.size();i++){
List<Integer> subList = list.get(i);
for(int k =0;k<subList.size();k++){
System.out.print(subList.get(k)+" ");
}
System.out.println();
}
}
}