91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[LeetCode]54. Spiral Matrix

發布時間:2020-07-23 02:34:10 來源:網絡 閱讀:751 作者:風子余 欄目:編程語言

54. Spiral Matrix

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].


題意:

根據給定的m*n矩陣。返回螺旋排序后的一維數組。

1  2  3
4  5  6
7  8  9
螺旋排序后的結果為:1,2,3,6,9,8,7,4,5
由此可知讀取共分四個方向,而且是四個方向的輪回:
1)從左到右(橫坐標不變,縱坐標逐步加一)。讀取結果為:1 2 3
2)從上到下(縱坐標不變,橫坐標逐步加matrixColSize)。讀取結果為:6 9
3)從右往左(橫坐標不變,縱坐標逐步減一)讀取結果為:8 7
4)從下往上(縱坐標不變,橫坐標逐步減matrixColSize)。讀取結果為:4

定義brow代表從左到右執行的次數,erow代表從右到左執行的次數;bcol代表從下往上讀取次數,ecol代表從上往下讀取次數。所以有:
1)從左往右讀取時,必須從bcol列開始讀取,遞增直到ecol列。
2)從右往左讀取時,必須從ecol列開始讀取,遞減直到bcol列。
2)從上往下讀取時,必須從brow行開始讀取,遞增直到erow行。
4)從下往上讀取時,必須從erow行開始讀取,遞減直到brow行。



/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* spiralOrder(int** matrix, int matrixRowSize, int matrixColSize)
{
    if ( !matrix )
    {
        return NULL;
    }
    
    int *dest = ( int *)malloc( sizeof(int) * matrixRowSize * matrixColSize + 1 );
    if ( !dest )
    {
        return NULL;
    }
    
    int times = 1;  
    int numbers = 0;
    
    int brow = 0;
    int erow = matrixRowSize - 1;
    int bcol = 0;
    int ecol = matrixColSize - 1;
    
    int index = 0;
    while ( numbers < matrixRowSize * matrixColSize )
    {
        if ( times % 4 == 1 )
        {
            int count = bcol;
            while ( count <= ecol )
            {
                *( dest + index ) = matrix[brow][count];
                count++;
                index++;
            }
            
            numbers = numbers + count - bcol;
            brow += 1;
        }
        else if ( times % 4 == 2 )
        {
            int count = brow;
            while ( count <= erow )
            {
                *( dest + index ) = matrix[count][ecol];
                count += 1;
                index++;
            }
            
            numbers = numbers + count - brow;
            ecol -= 1;
        }
        else if ( times % 4 == 3 )
        {
            int count = ecol;
            while ( count >= bcol )
            {
                *( dest + index ) = matrix[erow][count];
                count -= 1;
                index++;
            }
            
            numbers = numbers + ecol - count;
            erow -= 1;
        }
        else
        {
            int count = erow;
            while ( count >= brow )
            {
                *( dest + index ) = matrix[count][bcol];
                count -= 1;
                index++;
            }
            
            numbers = numbers + erow - count;
            bcol += 1;
        }
        times += 1;
        
    }
    *( dest + index ) = '\0';
    
    return dest;
}





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临猗县| 蛟河市| 梅州市| 秀山| 托克逊县| 神农架林区| 祁门县| 襄樊市| 水城县| 沂水县| 济宁市| 陆川县| 长垣县| 陵川县| 蒙阴县| 织金县| 仪征市| 太仆寺旗| 蒙自县| 牙克石市| 简阳市| 卢龙县| 镇平县| 内江市| 丁青县| 凤翔县| 灵寿县| 宁化县| 清丰县| 方城县| 资中县| 日照市| 东辽县| 沈阳市| 南开区| 石城县| 静安区| 辉南县| 会泽县| 南部县| 福州市|