国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法leetcode|59. 螺旋矩陣 II(rust重拳出擊)

這篇具有很好參考價(jià)值的文章主要介紹了算法leetcode|59. 螺旋矩陣 II(rust重拳出擊)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。



59. 螺旋矩陣 II:

給你一個(gè)正整數(shù) n ,生成一個(gè)包含 1n2 所有元素,且元素按順時(shí)針順序螺旋排列的 n x n 正方形矩陣 matrix 。

樣例 1:

算法leetcode|59. 螺旋矩陣 II(rust重拳出擊)

輸入:
	
	n = 3
	
輸出:
	
	[[1,2,3],[8,9,4],[7,6,5]]

樣例 2:

輸入:
	
	n = 1
	
輸出:
	
	[[1]]

提示:

  • 1 <= n <= 20

分析:

  • 面對(duì)這道算法題目,二當(dāng)家的再次陷入了沉思。
  • 可以每次循環(huán)移動(dòng)一步,判斷移到邊界就變換方向,巧用數(shù)組可以減少邏輯判斷的復(fù)雜性。
  • 也可以每次循環(huán)都換完4次方向,也就是完成一次順時(shí)針,然后縮圈,就像剝洋蔥一樣,一層一層的從外向內(nèi),非常好理解。
  • 和 54. 螺旋矩陣 非常類似,但是之前是讀,而現(xiàn)在相當(dāng)于是寫。
  • 邊界的判斷和邊界的縮小依然是關(guān)鍵。
  • 一個(gè)方向的最后位置,同樣可以作為下一個(gè)方向的開始值,要當(dāng)心不要重復(fù),方法是一樣的,只是細(xì)節(jié)上有差異。
  • 相對(duì)來說,按層的方式,一次遍歷完成一個(gè)順時(shí)針比較直觀,邏輯更加清晰,不容易出錯(cuò),每次遍歷都完成相同的內(nèi)容。
  • 每次循環(huán)完成一步的方式,要有個(gè)狀態(tài)切換的問題,把握不準(zhǔn)容易出錯(cuò)。

題解:

rust:

impl Solution {
    pub fn generate_matrix(n: i32) -> Vec<Vec<i32>> {
        let mut ans = vec![vec![0; n as usize]; n as usize];
        
        let mut num = 0;
        let (mut left, mut right, mut top, mut bottom) = (0, n as usize - 1, 0, n as usize - 1);
        while left <= right && top <= bottom {
            (left..right + 1).for_each(|column| {
                num += 1;
                ans[top][column] = num;
            });
            (top + 1..bottom + 1).for_each(|row| {
                num += 1;
                ans[row][right] = num;
            });
            if left < right && top < bottom {
                (left..right).rev().for_each(|column| {
                    num += 1;
                    ans[bottom][column] = num;
                });
                (top + 1..bottom).rev().for_each(|row| {
                    num += 1;
                    ans[row][left] = num;
                });
            }
            if right == 0 || bottom == 0 {
                break;
            }
            left += 1;
            right -= 1;
            top += 1;
            bottom -= 1;
        }
        
        return ans;
    }
}

go:

func generateMatrix(n int) [][]int {
    ans := make([][]int, n)
	for i := range ans {
		ans[i] = make([]int, n)
	}

	num := 0
	left, right, top, bottom := 0, n-1, 0, n-1
	for left <= right && top <= bottom {
		for column := left; column <= right; column++ {
			num++
			ans[top][column] = num
		}
		for row := top + 1; row <= bottom; row++ {
			num++
			ans[row][right] = num
		}
		if left < right && top < bottom {
			for column := right - 1; column >= left; column-- {
				num++
				ans[bottom][column] = num
			}
			for row := bottom - 1; row > top; row-- {
				num++
				ans[row][left] = num
			}
		}
		left++
		right--
		top++
		bottom--
	}

	return ans
}

c++:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> ans(n, vector<int>(n));

        int num = 0;
        int left = 0, right = n - 1, top = 0, bottom = n - 1;
        while (left <= right && top <= bottom) {
            for (int column = left; column <= right; ++column) {
                ans[top][column] = ++num;
            }
            for (int row = top + 1; row <= bottom; ++row) {
                ans[row][right] = ++num;
            }
            if (left < right && top < bottom) {
                for (int column = right - 1; column >= left; --column) {
                    ans[bottom][column] = ++num;
                }
                for (int row = bottom - 1; row > top; --row) {
                    ans[row][left] = ++num;
                }
            }
            ++left;
            --right;
            ++top;
            --bottom;
        }

        return ans;
    }
};

python:

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        ans = [[0] * n for _ in range(n)]
        num = 0
        left, right, top, bottom = 0, n - 1, 0, n - 1
        while left <= right and top <= bottom:
            for column in range(left, right + 1):
                num += 1
                ans[top][column] = num
            for row in range(top + 1, bottom + 1):
                num += 1
                ans[row][right] = num
            if left < right and top < bottom:
                for column in range(right - 1, left - 1, -1):
                    num += 1
                    ans[bottom][column] = num
                for row in range(bottom - 1, top, -1):
                    num += 1
                    ans[row][left] = num
            left, right, top, bottom = left + 1, right - 1, top + 1, bottom - 1
        return ans


java:

class Solution {
    public int[][] generateMatrix(int n) {
        final int[][] ans = new int[n][n];

        int num  = 0;
        int left = 0, right = n - 1, top = 0, bottom = n - 1;
        while (left <= right && top <= bottom) {
            for (int column = left; column <= right; ++column) {
                ans[top][column] = ++num;
            }
            for (int row = top + 1; row <= bottom; ++row) {
                ans[row][right] = ++num;
            }
            if (left < right && top < bottom) {
                for (int column = right - 1; column >= left; --column) {
                    ans[bottom][column] = ++num;
                }
                for (int row = bottom - 1; row > top; --row) {
                    ans[row][left] = ++num;
                }
            }
            ++left;
            --right;
            ++top;
            --bottom;
        }

        return ans;
    }
}

非常感謝你閱讀本文~
歡迎【點(diǎn)贊】【收藏】【評(píng)論】~
放棄不難,但堅(jiān)持一定很酷~
希望我們大家都能每天進(jìn)步一點(diǎn)點(diǎn)~
本文由 二當(dāng)家的白帽子:https://le-yi.blog.csdn.net/ 博客原創(chuàng)~文章來源地址http://www.zghlxwxcb.cn/news/detail-510767.html


到了這里,關(guān)于算法leetcode|59. 螺旋矩陣 II(rust重拳出擊)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法leetcode|63. 不同路徑 II(rust重拳出擊)

    算法leetcode|63. 不同路徑 II(rust重拳出擊)

    一個(gè)機(jī)器人位于一個(gè) m x n 網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動(dòng)一步。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為 “Finish”)。 現(xiàn)在考慮網(wǎng)格中有障礙物。那么從左上角到右下角將會(huì)有多少條不同的路徑? 網(wǎng)格中的障礙

    2024年02月16日
    瀏覽(28)
  • 算法leetcode|92. 反轉(zhuǎn)鏈表 II(rust重拳出擊)

    算法leetcode|92. 反轉(zhuǎn)鏈表 II(rust重拳出擊)

    給你單鏈表的頭指針 head 和兩個(gè)整數(shù) left 和 right ,其中 left = right 。請(qǐng)你反轉(zhuǎn)從位置 left 到位置 right 的鏈表節(jié)點(diǎn),返回 反轉(zhuǎn)后的鏈表 。 鏈表中節(jié)點(diǎn)數(shù)目為 n 1 = n = 500 -500 = Node.val = 500 1 = left = right = n 你可以使用一趟掃描完成反轉(zhuǎn)嗎? 將鏈表分成3部分,即前面不需要反轉(zhuǎn)的部

    2024年02月05日
    瀏覽(28)
  • 算法leetcode|81. 搜索旋轉(zhuǎn)排序數(shù)組 II(rust重拳出擊)

    算法leetcode|81. 搜索旋轉(zhuǎn)排序數(shù)組 II(rust重拳出擊)

    已知存在一個(gè)按非降序排列的整數(shù)數(shù)組 nums ,數(shù)組中的值不必互不相同。 在傳遞給函數(shù)之前, nums 在預(yù)先未知的某個(gè)下標(biāo) k ( 0 = k nums.length )上進(jìn)行了 旋轉(zhuǎn) ,使數(shù)組變?yōu)?[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] (下標(biāo) 從 0 開始 計(jì)數(shù))。例如, [0,1,2,4,4,4,5,6,

    2024年02月07日
    瀏覽(22)
  • 算法leetcode|80. 刪除有序數(shù)組中的重復(fù)項(xiàng) II(rust重拳出擊)

    給你一個(gè)有序數(shù)組 nums ,請(qǐng)你 原地 刪除重復(fù)出現(xiàn)的元素,使得出現(xiàn)次數(shù)超過兩次的元素只出現(xiàn)兩次 ,返回刪除后數(shù)組的新長(zhǎng)度。 不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成。 說明 : 為什么返回?cái)?shù)值是整數(shù),但輸出的答案是

    2024年02月09日
    瀏覽(33)
  • 算法leetcode|74. 搜索二維矩陣(rust重拳出擊)

    算法leetcode|74. 搜索二維矩陣(rust重拳出擊)

    給你一個(gè)滿足下述兩條屬性的 m x n 整數(shù)矩陣: 每行中的整數(shù)從左到右按非遞減順序排列。 每行的第一個(gè)整數(shù)大于前一行的最后一個(gè)整數(shù)。 給你一個(gè)整數(shù) target ,如果 target 在矩陣中,返回 true ;否則,返回 false 。 m == matrix.length n == matrix[i].length 1 = m, n = 100 -10 4 = matrix[i][j],

    2024年02月11日
    瀏覽(22)
  • 算法leetcode|73. 矩陣置零(rust重拳出擊)

    算法leetcode|73. 矩陣置零(rust重拳出擊)

    給定一個(gè) m x n 的矩陣,如果一個(gè)元素為 0 ,則將其所在行和列的所有元素都設(shè)為 0 。請(qǐng)使用 原地 算法。 m == matrix.length n == matrix[0].length 1 = m, n = 200 -2 31 = matrix[i][j] = 2 31 - 1 一個(gè)直觀的解決方案是使用 O(mn) 的額外空間,但這并不是一個(gè)好的解決方案。 一個(gè)簡(jiǎn)單的改進(jìn)方案是使

    2024年02月11日
    瀏覽(21)
  • 算法leetcode|82. 刪除排序鏈表中的重復(fù)元素 II(rust重拳出擊)

    算法leetcode|82. 刪除排序鏈表中的重復(fù)元素 II(rust重拳出擊)

    給定一個(gè)已排序的鏈表的頭 head , 刪除原始鏈表中所有重復(fù)數(shù)字的節(jié)點(diǎn),只留下不同的數(shù)字 。返回 已排序的鏈表 。 鏈表中節(jié)點(diǎn)數(shù)目在范圍 [0, 300] 內(nèi) -100 = Node.val = 100 題目數(shù)據(jù)保證鏈表已經(jīng)按升序 排列 面對(duì)這道算法題目,二當(dāng)家的再次陷入了沉思。 這道題目和 83. 刪除排序

    2024年02月08日
    瀏覽(26)
  • LeetCode 59. 螺旋矩陣 II

    題目鏈接:LeetCode 59. 螺旋矩陣 II 本題不涉及算法,只是簡(jiǎn)單的模擬,但是由于邊界條件比較多,因此容易出錯(cuò)。 分析題干:題目要求按照右、下、左、上、這樣的順序?qū)?shù)組進(jìn)行填充,填充的值為 1 ~ n*n ,因此問題的關(guān)鍵就是找到待填充的位置,將其值賦值為 i 即可。 由于

    2024年02月02日
    瀏覽(22)
  • LeetCode59 螺旋矩陣 II

    螺旋矩陣 II 循環(huán)不變量的應(yīng)用 給你一個(gè)正整數(shù) n ,生成一個(gè)包含 1 到 n2 所有元素,且元素按順時(shí)針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1: 輸入:n = 3 輸出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2: 輸入:n = 1 輸出:[[1]] 提示: 1 = n = 20

    2024年01月23日
    瀏覽(22)
  • 【LeetCode-中等題】59. 螺旋矩陣 II

    【LeetCode-中等題】59. 螺旋矩陣 II

    定義四個(gè)邊界條件,每轉(zhuǎn)一圈,把數(shù)值填進(jìn)去,然后縮小一圈,直到不滿足條件位置 結(jié)束循環(huán)條件可以是: 兩種結(jié)束條件都可以,但是一定要注意每次處理一條邊界的范圍 不能重復(fù)賦值

    2024年02月09日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包