使用上下左右四个指针来输出回文数,时间复杂度为线性,可输出任意长度,任意开头和任意步长回形数组
public static void main(String[] args) {
int n=10; // 需要几行就是几
int number=1; // 从几开始就是几
int[][] answer=new int[n][n];
int left=0;
int right=n-1;
int top=0;
int bottom=n-1;
while (top<=bottom&&left<=right){
// 左横->
for(int i=left;i<=right;i++){
answer[top][i]=number++;
}
top++;
// 下竖
for(int i=top;i<=bottom;i++){
answer[i][right]=number++;
}
right--;
// 右横 <-
for(int i=right;i>=left;i--){
answer[bottom][i]=number++;
}
bottom--;
// 上竖
for(int i=bottom;i>=top;i--){
answer[i][left]=number++;
}
left++;
}
for(int i=0;i<n;i++){
System.out.println(Arrays.toString(answer[i]));
}
}
其中number++
替换为number+len
可以做到任意步长