螺旋打印2D数组

//一破题付出血的代价   多思考!public static void offer(int [][]a){
       int left=0,right=a.length-1,low=0,high=a[0].length-1;
       while(low<=high){
            for(int i=left;i<=right;i++){//123
                System.out.print(a[left][i]+" ");
            }
            low++;
           for(int i=low;i<=high;i++){//69
               System.out.print(a[i][right]+" ");
           }
           right--;
           for(int i=right;i>=left;i--){//87
               System.out.print(a[high][i]+" ");
           }
           high--;
           for(int i=high;i>=low;i--){//45
               System.out.print(a[i][left]+" ");
           }
            left++;

       }

    }
时间: 2024-11-08 21:48:39

螺旋打印2D数组的相关文章

顺时针和逆时针螺旋打印二维数组(行列式)

一.要求: 行列式,行和宽不一定相等,要求顺时针螺旋打印每一个元素,所谓顺时针螺旋即: 第一圈:从第一行第一列元素开始,先从左到右打印第一行所有元素,接着打印最后一剩余列元素,再从右到左打印最后一行剩余元素,接着从下到上打印第一列剩余元素 第二圈:从第二行第二列开始,按上面的顺时针顺序打印一圈元素 ...,一圈圈反复,直到把所有元素无重复的打印完. 逆时针螺旋与上面的顺序刚好相反. 二.分析: 顺时针螺旋打印可以将问题分割为:先按顺时针打印第一圈,再按顺时针打印第二圈,其中每圈又分四个步骤:从左

利用指针地址偏移打印一维数组

// //  main.c //  利用指针地址偏移打印一维数组 // // Created by wanghy on 15/7/24. // Copyright (c) 2015年 wanghy. All rights reserved. // #include <stdio.h> #define len 10 int main(int argc, const char * argv[]){ //定义一个存放  int 类型元素的一维数组. int arry[]={1,2,3,4,5,6,7

以符合人类阅读的方式打印php数组

在程序开发过程中:打印数据进行查看调试是非常频繁的:如果没有一种易于阅读的样式那是相当痛苦的: 先定义一个数组: 1 2 3 4 5 6 7 8 9 $array=array(     't0'=>'test0',     't1'=>'test1',     't3'=>array(         'tt0'=>'test0',         'tt1'=>'test1',         'tt3'=>'test3',         )     ); 如果用p

螺旋打印二维数组

void main() {         // 初始的区间坐标     int startX = 0, endX = 4;     int startY = 0, endY = 5;          while(startX<=endX && startY<=endY)  // 循环条件     {         int i;         for(i=startX; i<=endX; i++)  // 输出上边的行             cout <&l

螺旋输出一组数组数据的实现

要螺旋输出一组数据,实现的解决方案:采用二维数组的形式来解决 结果如下: 实现如下: 这里我们定义一个类      public class LoopSort{         public static void main(String[] args){                //要螺旋输出的数据的个数             Scanner s=new Scanner(System.in);             System.out.println("请输入螺旋输出的数据的行和列

Snapchat - 向左下角打印2D矩阵

题目是这样的,给一个2d矩阵,向左下角打印矩阵,比如 1,2,3,4 5,6,7,8 9,10,11,12 {{1},{2,5},{3,6,9},{4,7,10},{8,11},{12}} 所以解题的重点是,结果里面的每一组,它们的横坐标+纵坐标是相等的,然后最大的可能是col+row-2 1 public List<List<Integer>> printMatrix(int[][] board) { 2 int height = board.length; 3 int widt

算法总结之 不重复打印排序数组中相加和胃给定值的所有三元数组

这个问题跟上一个 大同小异,如何不重复打印呢? 首先保证选定三元数组中第一个值不重复,剩下的就跟前一个题目一样了. package TT; public class Test69 { public static void printUniqueTired(int[] arr, int k){ if(arr==null || arr.length<3){ return; } for(int i =0; i<arr.length-2; i++){ if(i==0 || arr[i] != arr[

打印zigzag数组

今天花了不少时间来研究如何打印一个之字形zigzag矩阵,参考了下http://blog.163.com/[email protected]/blog/static/4741291720117842634276/,具体思路和程序在下面. // test2.cpp : 定义控制台应用程序的入口点. //Date:2015年6月17日 //Author: jsalienzy /* 0 1 5 6 14 15 27 28 * 2 4 7 13 16 26 29 42 * 3 8 12 17 25 30

简单螺旋打印矩阵 - 直接, 好理解

打印螺旋矩阵的一种简单办法 , C 语言实现 #include <stdio.h> #define N 30 static int val = 10; int arr[N][N]; void print_row(int row_cur, int col_start, int col_end, int left_to_right){ int col_cur = col_start; if( col_start < 0 || col_end < 0) return; if( left_