第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過對角線遍歷具有左傾對角線部分的二維數(shù)組來獲取數(shù)組列表?

通過對角線遍歷具有左傾對角線部分的二維數(shù)組來獲取數(shù)組列表?

桃花長相依 2022-06-23 17:42:41
我知道我可以使用for (int i = 0; i < myArray.length; i++)或增強的 for 循環(huán)來完全遍歷循環(huán)。但是,我試圖通過在矩形二維數(shù)組中完全對角迭代來創(chuàng)建新的 char[] 數(shù)組,同時采用左傾部分(而不是通常的右傾部分)。換句話說,請看下圖。我希望每個 char[] 數(shù)組都由下圖中兩條紅色對角線之間的所有字符組成。因此,如果迭代從右上角開始,則創(chuàng)建的第一個數(shù)組將是 , ['q'],第二個將是['e', 'w'],第三個,['d', 'j', 'e']依此類推。這是圖表代碼:private static char[][] bigArray = {        {'a', 'b', 'c', 'd', 'e', 'q'},        {'f', 'g', 'h', 'i', 'j', 'w'},        {'k', 'l', 'm', 'n', 'o', 'e'},        {'p', 'q', 'r', 's', 't', 'r'},        {'u', 'v', 'w', 'x', 'z', 't'}};嘗試迭代左傾對角線使得很難始終知道我正在使用的數(shù)組的長度。特別是因為我創(chuàng)建的新 char[] 數(shù)組的長度不同。有沒有一種方法可以告訴 java 停止為我創(chuàng)建的每個數(shù)組以特定長度迭代?
查看完整描述

1 回答

?
達令說

TA貢獻1821條經(jīng)驗 獲得超6個贊

嘗試迭代左傾對角線使得很難始終知道我正在使用的數(shù)組的長度。特別是因為我創(chuàng)建的新 char[] 數(shù)組的長度不同。


要根據(jù)您在矩陣中的當前位置(使用索引和)計算對角線的長度(新的大?。?,請執(zhí)行此操作char[]bigArrayij


int newCharArrayLength = Math.min(height - i, width - j);

實施(以下解釋)

private static List<char[]> getDiagonalsList(char[][] arr) {

    List<char[]> ans = new ArrayList<>();

    int height = arr.length;

    int width = arr[0].length;

    int numberOfDiagonals = arr.length + arr[0].length - 1;


    for (int diagonalIdx = 0; diagonalIdx < numberOfDiagonals; diagonalIdx++) {

        int i = Math.max(diagonalIdx - width + 1, 0);

        int j = Math.max(width - diagonalIdx - 1, 0);

        int currentDiagonalLength = Math.min(height - i, width - j);

        int idx = 0;


        char[] charArr = new char[currentDiagonalLength];

        while (i < height && j < width)

            charArr[idx++] = arr[i++][j++];


        ans.add(charArr);

    }


    return ans;

}

一個main函數(shù)

您可以編寫這樣的main函數(shù)來輸出結(jié)果


public static void main(String[] args) {

    char[][] arr = {

            {'a', 'b', 'c', 'd', 'e', 'q'},

            {'f', 'g', 'h', 'i', 'j', 'w'},

            {'k', 'l', 'm', 'n', 'o', 'e'},

            {'p', 'q', 'r', 's', 't', 'r'},

            {'u', 'v', 'w', 'x', 'z', 't'}};


    for (char[] diag : diagonal(arr))

        System.out.println(diag);

}

輸出

結(jié)果將如下所示


q

ew

dje

cior

bhntt

agmsz

flrx

kqw

pv

u

解釋和算法

  1. 初始化一個List。char[]這是您在每次迭代中放置對角線的地方

  2. 計算numberOfDiagonals矩形的總數(shù)。您可以通過將寬度和高度相加減一(重復角)來做到這一點

  3. 計算你的i指數(shù)。這可以通過從對角線索引減去 1 減去矩形的寬度來完成(因為我們從 0 開始索引)。該指數(shù)應始終為正

  4. 計算你的j指數(shù)。與以前的原理相同,但您反轉(zhuǎn)減法,因為我們需要反向?qū)蔷€。這也需要積極

  5. 計算你的currentDiagonalLength. 要做到這一點更小,當前行和高度或當前列和寬度之間的距離(i)(j)

  6. 初始化一個數(shù)組,該數(shù)組將使用先前計算的長度保存您的對角線

  7. 一項一項地添加項目。在每次迭代中增加當前行i當前列j

  8. 將該數(shù)組附加到步驟 1中提到的列表中

  9. 重復步驟 3步驟 8,直到完成所有對角線


查看完整回答
反對 回復 2022-06-23
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號