真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

順時針打印二位數(shù)組-創(chuàng)新互聯(lián)

順時針打印二維數(shù)組 題目簡述
  • 給定一個N*M的整型二維數(shù)組,要求以(0,0)為起點,由外層向內(nèi)層,按順時針方向依次輸出全部元素
    例如矩陣
    1 2 3 4
    5 6 7 8
    9 10 11 12
    13 14 15 16
解題思路

方案是一圈一圈打印
在寫代碼過程中要注意矩陣中下標的記錄

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:申請域名、雅安服務器托管、營銷軟件、網(wǎng)站建設、蒲城網(wǎng)站維護、網(wǎng)站推廣。

先設定好邊界,行、列,還有初始值。設定好邊界后,用while去遍歷打印的動作,先右后下再左再上,這個順時針的動作,因為你會發(fā)現(xiàn)其實順時針的規(guī)律也就這樣,只要重復循環(huán)這個動作即可得出答案。

  • 順時針輸出全部元素,第一步就要先打印出上邊一條邊(即matrix[0][0]~matrix[0][N-1]);
    //上邊一條邊  
    while (leftUpCol<= rightDownCol) {
    System.out.println(matrix[leftUpRow][leftUpCol++] + " ");
    }
    //恢復
    leftUpCol = rightDownCol;
    leftUpRow++;
  • 第二步打印出右邊一條邊(即matrix[1][N-1]~matrix[N-1][N-1]);
    //右邊一條便邊
        while (leftUpRow<= rightDownRow) {
            System.out.println(matrix[leftUpRow++][leftUpCol]);
        }
        //恢復
        leftUpRow = rightDownRow;
        leftUpCol--;
  • 第三步打印出下邊一條邊(即array[n-1][n-2]~array[n-1][0]);

    下邊一條邊是列在減少
    則leftUpRow需要 >= 0
    所以要重新將指針賦值,并將后邊的指針變量進行修改

    //下邊一條邊
        while (c >= leftUpCol) {
            System.out.println(matrix[r][c--]);
        }
        //恢復
        c = leftUpCol;
        r--;
  • 第四步打印出左邊一列(即array[0][n-2]~array[1][0]).
    while (r >leftUpRow){
            System.out.println(matrix[r--][c]);
        }
  • 至此,已經(jīng)將二維數(shù)組的最外圍打印出來了,將最外圍的數(shù)組元素去除之后,可以發(fā)現(xiàn)里面的數(shù)組是一個新的二維數(shù)組,所以,可以用遞歸來實現(xiàn)。

應該數(shù)據(jù)初始化之后繼續(xù)加上一個while循環(huán)
并且leftUpRow和leftUpCol應該遞增,rightDownRow和rightDownCol應該遞減
在外循環(huán)中r和c應該每次都進行初始化

while (leftUpRow<= rightDownRow && leftUpCol<= rightDownCol) {……};
源代碼
public class Case01_Print2DArr {
  public static void main(String[] args) {
      int[][] matrix = {
              {1, 2, 3, 4},
              {5, 6, 7, 8},
              {9, 10, 11, 12},
              {13, 14, 15, 16},
      };
      print(matrix);
  }

  static void print(int[][] matrix) {
      int leftUpRow = 0, leftUpCol = 0;//設置好邊界值
      rightDownRow = matrix.length - 1;//行 
      rightDownCol = matrix[0].length - 1;//列
      while (leftUpRow<= rightDownRow && leftUpCol<= rightDownCol) {//設置邊界,且遍歷
          int r = leftUpRow, c = leftUpCol;//更新步驟的初始值
          //上邊一條邊
          while (c<= rightDownCol) {
              System.out.println(matrix[r][c++]);
          }
          //恢復
          c = rightDownCol;
          r++;

          //右邊一條便邊
          while (r<= rightDownRow) {
              System.out.println(matrix[r++][c]);
          }
          //恢復
          r = rightDownRow;
          c--;

          //下邊一條邊
          while (c >= leftUpCol) {
              System.out.println(matrix[r][c--]);
          }
          //恢復
          c = leftUpCol;
          r--;

          while (r >leftUpRow) {
              System.out.println(matrix[r--][c]);
          }
          leftUpRow++;
          leftUpCol++;
          rightDownRow--;
          rightDownCol--;

      }
  }
}

測試結(jié)果

1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10

注意
  • 在最初寫的代碼舉的例子一定是很特殊或者很規(guī)整的,所以寫完代碼之后應該學會去修改數(shù)據(jù)測試代碼的可行性
  • 寫代碼的邏輯一定要非常清楚,并且變量的命名最好使用意思明確的一串字符來表示
  • 在寫代碼之前要保持思路清晰,把大的問題拆解成一個個小的問題逐一解決
  • 編程要學會多多思考多多優(yōu)化自己的代碼

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁名稱:順時針打印二位數(shù)組-創(chuàng)新互聯(lián)
文章來源:http://weahome.cn/article/cseoos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部