LeetCode 48. Rotate Image (Solution Explained)

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ธ.ค. 2024

ความคิดเห็น • 110

  • @Xyvier
    @Xyvier 4 ปีที่แล้ว +17

    You are the kind of tech youtuber that I didn't know I needed.
    Thank you for doing videos like these. I have been consuming them alot lately.
    Highly informational!

  • @luiscortes6563
    @luiscortes6563 5 ปีที่แล้ว +53

    This makes much more sense than the CTCI solution explanation!

    • @AdityaKamble49
      @AdityaKamble49 4 ปีที่แล้ว +5

      Exactly, Much more intuitive than that layer by layer approach

    • @faizyt12345
      @faizyt12345 4 ปีที่แล้ว +3

      but im looking for MxN matrix. this will work only for a square matrix right

    • @ryebr3ad
      @ryebr3ad 3 ปีที่แล้ว +3

      @@faizyt12345 Correct -- it's possible to do on an NxM, though it cannot be done in place as the dimensions of the matrix will shift to MxN. The transpose code is similar, except it populates a new array instead of swaping. As an effect, it also needs to hit every element of the original matrix in order to do the transposition
      int rows = matrix.length;
      int cols = matrix[0].length;
      int rotated[][] = new int[cols][rows];
      for (int i = 0; i < cols; i++) {
      for (int j = 0; j < rows; j++) {
      rotated[i][j] = matrix[j][i];
      }
      }
      I know this reply is 7 months late; still, I hope it helped.

    • @faizyt12345
      @faizyt12345 3 ปีที่แล้ว +1

      @@ryebr3ad thanks after 7 months

    • @Suraj-tu3nw
      @Suraj-tu3nw 3 ปีที่แล้ว

      I also came after not being able to grasp the concept from CTCI for this particular problem. 😂

  • @baibhabmondal1740
    @baibhabmondal1740 4 ปีที่แล้ว +6

    Great! I was stuck until I found a pattern and solved it recursively. But this (your method) is way simpler.
    I'll put my solution in case someone looking for a pattern.
    class Solution {
    public:
    void rotate(vector& matrix) {

    helper(matrix, matrix.size(), 0 );

    }
    void helper(vector& mat, int size, int start) {

    if(size

  • @NuschStephany
    @NuschStephany 4 ปีที่แล้ว +3

    Wow! I read some articles and tried following some examples but only after your explanation, I was able to fully understand the concept and the tricks! Thank you so so much!

  • @bharatprakashparakh9601
    @bharatprakashparakh9601 5 ปีที่แล้ว +6

    Brother, Superb explanation ! Earlier I thought of the same approach but got stuck in the code and your video helped me in a perfect way.

  • @xinyucao5550
    @xinyucao5550 4 ปีที่แล้ว +6

    Great explanation! I had a variant of this problem yesterday in an OA, and I didn't figure out how to rotate the square matrix. wish I had watched your video earlier lol! Keep the good videos coming!

  • @Asingh42
    @Asingh42 4 หลายเดือนก่อน +1

    Daymnnn Man you made it so easy !! You have the best solutions for leetcode on youtube

  • @monicawang5024
    @monicawang5024 5 ปีที่แล้ว +31

    I felt stuck then I watched this video. Feel alive again!!

  • @JustThink2000
    @JustThink2000 3 ปีที่แล้ว

    of all the explanations ive seen of this problem, this explanation makes the most since.

  • @adarshsasidharan254
    @adarshsasidharan254 3 ปีที่แล้ว +2

    I'm glad I didn't waste much time thinking about the solution on my own cuz I would have never guessed this

  • @random-0
    @random-0 3 ปีที่แล้ว +1

    I was stuck on this problem from 3days and solved on my own but this approach is much better

  • @Sergey111111
    @Sergey111111 2 ปีที่แล้ว

    Thanks a lot! I watched the different solution with actual rotating, but your aproach looks more sophisticated. I think the description force you to do like this showing several matrixes with swapped rows and columns

  • @cracknlp364
    @cracknlp364 3 ปีที่แล้ว

    You can also create a matrix and multiply to get the desired result
    i -row,j-column
    for position i=i, j=0 - multiply i-th column with [0 0 1]
    for position i=i, j=1 - multiply i-th column with [0 1 0]
    for position i=i, j=2 - multiply i-th column with [1 0 0]
    we can also think parameterizing the multiplication matrix as well. Size of the multiplication matrix is dependent on the size of the original matrix

  • @BrajBliss
    @BrajBliss 2 ปีที่แล้ว

    Oh god thanks for this solution. The two available on LeetCode solutions page and in some other videos are either complex or not explained properly. Finally got this into my head.

  • @rakshith3547
    @rakshith3547 3 ปีที่แล้ว +2

    We can simplify the 2nd loop little better like
    public void rotate(int[][] matrix) {
    if (matrix == null || matrix.length

    • @pinigantikrishnavamsi7779
      @pinigantikrishnavamsi7779 2 ปีที่แล้ว +1

      yes but its taking a little bit more memory but that's okay it looks more readable and understandable

  • @alregith
    @alregith 4 ปีที่แล้ว

    Hi Nick, can we not do j=i+1 when we do the transpose?

  • @WowPlusWow
    @WowPlusWow 4 ปีที่แล้ว +2

    How is this linear time? There is 2 nested loops.

    • @raymondtan2795
      @raymondtan2795 3 ปีที่แล้ว +1

      Linear with respect to the dimensions of the matrix.

  • @sujitha2339
    @sujitha2339 2 ปีที่แล้ว

    Hi.. Nice explanation. Thanks for the video!! Could you please tell me how the time complexity is not O(N^2)?

  • @shiprashakya6106
    @shiprashakya6106 2 ปีที่แล้ว

    Great explanation, really helped a lot. Love from India.

  • @huizhao2050
    @huizhao2050 4 ปีที่แล้ว

    I think that in the transpose part, you can add one condition if(i != j) because the diagonal elements don't need to be transposed.

  • @ashishdukare1313
    @ashishdukare1313 4 ปีที่แล้ว +4

    Thanks, man! Great Logic. It kind of reminds of Linear Algebra : )

  • @BadriBlitz
    @BadriBlitz 3 ปีที่แล้ว

    Good explanation.Finally i understood the approach.

  • @TheIndianChroniclee
    @TheIndianChroniclee 4 ปีที่แล้ว

    Really Really Helpful Buddy. Spent A Lot Time On It.

  • @prassifromdec10
    @prassifromdec10 2 ปีที่แล้ว

    the best solution so far!

  • @joseeduardobarajasperez1838
    @joseeduardobarajasperez1838 ปีที่แล้ว

    Hi Nick, thank you so much for your videos :D Why did you set j=i if technically could be j=0 but it did not work that way :c

  • @Carlos-sy7cv
    @Carlos-sy7cv 5 ปีที่แล้ว

    How would you do this if it was asking for counter-clockwise? Or would you just rotate it clockwise 3 times?

    • @drukendoggy
      @drukendoggy 4 ปีที่แล้ว +1

      Try to transpose and do a flip on a different symmetry. See if you can figure it out, it's very similar. The same idea applies to 180 flip as well.

  • @sidhantsuman4601
    @sidhantsuman4601 4 ปีที่แล้ว

    bro you are crazy man this solution is hilarious I was stuck at this for more than 4 hrs ur soln is gr8 Love from India

  • @abdoulbarry8111
    @abdoulbarry8111 2 ปีที่แล้ว

    you wanna know this if you have online assessments coming up!!! Matrix diagonals and rotation comes up alot

  • @vighneshk509
    @vighneshk509 4 ปีที่แล้ว

    great explanation only doubt how is this linear time solution if we are using 2 for loops ?? help me out please

    • @ajaypanthagani5959
      @ajaypanthagani5959 4 ปีที่แล้ว

      actually he meant linear in-terms of size of entire matrix. for example if it is 3 x 3 matrix, size of matrix is 9. Here N is 9. so it takes linear time in terms of entire matrix size. think of it as a single array.

  • @abhinavkannojia1053
    @abhinavkannojia1053 4 ปีที่แล้ว

    Best explanation by far to this problem.

  • @angelaferro3044
    @angelaferro3044 4 ปีที่แล้ว +1

    Awesome explanation. Thank you so much for all you do!

  • @indranilthakur3605
    @indranilthakur3605 4 ปีที่แล้ว

    Hey.. WHy do we do N/2 in the second for loop for J?

    • @aximilian15
      @aximilian15 4 ปีที่แล้ว

      Is because when you are switching the elements from the first column to the last column, you stop midway through each row.

    • @indranilthakur3605
      @indranilthakur3605 4 ปีที่แล้ว

      @@aximilian15 I understood that later. Thanks

  • @MP-ny3ep
    @MP-ny3ep 9 หลายเดือนก่อน

    Amazing explanation! Thank you very much

  • @julietgeorge4858
    @julietgeorge4858 4 ปีที่แล้ว +1

    Another great video, Thanks, Nick!

  • @sarthaksrivastav3408
    @sarthaksrivastav3408 4 ปีที่แล้ว +1

    Excellent explanation. Thank you.

  • @phafid
    @phafid ปีที่แล้ว

    this is brilliant and doable. Thanks!

  • @genghisda236
    @genghisda236 4 ปีที่แล้ว

    dude don't forget to say , leave a like . I almost forgot to give a like.. you are the best.

  • @shrimatkapoor2200
    @shrimatkapoor2200 4 ปีที่แล้ว

    I think you can set j to i+1 because you can skip over the same index values

  • @niraiarasu131
    @niraiarasu131 4 ปีที่แล้ว +2

    what if we just reverse each row in the second loop

  • @sithumdilanga650
    @sithumdilanga650 ปีที่แล้ว

    Thank you so much. This really helped me a lot.

  • @nithyasubramanian231
    @nithyasubramanian231 4 ปีที่แล้ว

    Love it! Such an elegant solution

  • @christopherlee3311
    @christopherlee3311 3 ปีที่แล้ว

    Amazing explanation, man!! Thank you. Liked and subscribed!

  • @Ben-pb7ct
    @Ben-pb7ct 3 ปีที่แล้ว

    Great Explanation and very clean code !

  • @Chloe-si2hq
    @Chloe-si2hq 2 ปีที่แล้ว

    Thank you Nick!!

  • @pretty_in_scarlet
    @pretty_in_scarlet 4 ปีที่แล้ว

    Same exact question in Javascript is under the "easy" category on LeetCode ?!

  • @SHSelect
    @SHSelect 2 ปีที่แล้ว

    thats sick thanks Nick

  • @georgechen1124
    @georgechen1124 5 ปีที่แล้ว

    excellent explanation and solution Nick! more video pls

  • @rioslj9452
    @rioslj9452 4 ปีที่แล้ว

    What abt an NxM ? .ex 3x5?

    • @yashshrivastava3748
      @yashshrivastava3748 4 ปีที่แล้ว +1

      You would not be able to rotate a non square matrix in place.

  • @Darkblaze371
    @Darkblaze371 4 ปีที่แล้ว

    Made this so simple thanks!

  • @mytommy
    @mytommy 5 ปีที่แล้ว +1

    The time complexity for the first nested loop is O(n^2) or more accurately O(row*col), isn't it? I'm confused why you mentioned the solution is linear time complexity. Also, whats the time complexity for the second nested loop

    • @NickWhite
      @NickWhite  5 ปีที่แล้ว

      mytommy listen more closely I explained it pretty clearly

    • @NickWhite
      @NickWhite  5 ปีที่แล้ว +1

      Linear or O(N) where N is the number of elements in the 2d array

    • @NickWhite
      @NickWhite  5 ปีที่แล้ว

      Some people say O(M*N) or O(rows*columns) which is fine as long as you specify what you’re variables are referencing

    • @mytommy
      @mytommy 5 ปีที่แล้ว

      @@NickWhite I know, I watched the video more than once. You mentioned the solution doesn't use data structure and the loops are separate. Still, how does that make the solution linear time complexity?

    • @nbavc
      @nbavc 5 ปีที่แล้ว

      ​@@mytommy Yes it is O(n^2). Outer loop is O(n) inner loop is basically n-1, n-2... which is a known series and the product of the inner and outer loop run times gets you o(n^2).

  • @jl1835
    @jl1835 3 ปีที่แล้ว

    great vid! the time complexity of this algorithm is O(N^2) not linear tho

    • @ankursao7
      @ankursao7 3 ปีที่แล้ว +1

      linear for the size of matrix.

  • @krishnanigalye1173
    @krishnanigalye1173 4 ปีที่แล้ว

    super easy solution bro. Thanks a ton!

  • @rohanmaurya4060
    @rohanmaurya4060 4 ปีที่แล้ว +1

    just awesome man just awesome

  • @ForCodingInterview
    @ForCodingInterview 3 ปีที่แล้ว

    Great Explanation!!!! As always :)

  • @brrrkit
    @brrrkit 4 ปีที่แล้ว

    1:50 code real fine

  • @magicundercover
    @magicundercover 4 ปีที่แล้ว

    Great explanation, thanks

  • @asifnawaz3454
    @asifnawaz3454 4 ปีที่แล้ว

    you made it easy.....
    Thanks

  • @DasBeatz
    @DasBeatz 4 ปีที่แล้ว

    Nice solution!

  • @user-kh2od5bw3u
    @user-kh2od5bw3u 5 ปีที่แล้ว +1

    Thanks!

  • @qwarlockz8017
    @qwarlockz8017 5 ปีที่แล้ว

    I LOVE sprite rotation with a Matrix!!!!!!

    • @qwarlockz8017
      @qwarlockz8017 5 ปีที่แล้ว

      Your videos really are some of the clearest and cleanest on these problems that I have seen. THANKS!

  • @tarunk57
    @tarunk57 3 ปีที่แล้ว

    bro thanks for everything

  • @daeshavvn
    @daeshavvn 4 ปีที่แล้ว

    Thank you

  • @sakthim7160
    @sakthim7160 5 ปีที่แล้ว

    Great video❤

  • @sarvarjuraev1376
    @sarvarjuraev1376 6 หลายเดือนก่อน

    Thanks man

  • @vk1618
    @vk1618 4 ปีที่แล้ว

    Good question

  • @KogutDV
    @KogutDV 3 ปีที่แล้ว

    TNX man!

  • @shusenacademy
    @shusenacademy 4 ปีที่แล้ว

    Oh, man, you are awesome

  • @adilkapadia8237
    @adilkapadia8237 4 ปีที่แล้ว

    nice vid!

  • @shankhadeepbanerjee4980
    @shankhadeepbanerjee4980 4 ปีที่แล้ว

    Thanks bro

  • @flexer7822
    @flexer7822 3 ปีที่แล้ว +1

    This is not a real life experience, when you open an image you get a ruster of bytes you don't a get a matrix

  • @imranimmu4714
    @imranimmu4714 2 ปีที่แล้ว

    Thank u

  • @himanshudhiman5424
    @himanshudhiman5424 3 ปีที่แล้ว

    thanks bruh

  • @farhan787
    @farhan787 4 ปีที่แล้ว

    C++ Code to do it,
    void swapRowValues(vector& matrix, int row) {
    const int n = matrix.size();
    int left = 0;
    int right = n - 1;
    while (left < right) {
    swap(matrix[row][left++], matrix[row][right--]);
    }
    }
    void transpose(vector& matrix) {
    const int n = matrix.size();
    for (int i = 0; i < n; i++) {
    for (int j = i; j < n; j++) {
    swap(matrix[i][j], matrix[j][i]);
    }
    }
    }
    void rotate(vector& matrix) {
    const int n = matrix.size();
    transpose(matrix);
    // Swap each row's values, e.g., col 0 with col n - 1, col 1 with col n - 2, and so on....
    for (int i = 0; i < n; i++) {
    swapRowValues(matrix, i);
    }
    }

  • @kervensjasmin1508
    @kervensjasmin1508 4 ปีที่แล้ว

    I feel less stupid. Thanks

  • @jwolfe890
    @jwolfe890 2 ปีที่แล้ว

    cool trick.

  • @kedikebba
    @kedikebba 4 ปีที่แล้ว

    Champ!

  • @SARDARIN
    @SARDARIN 3 ปีที่แล้ว +1

    Your clapping of hands gave me a headache, kindly avoid that

  • @andriidanylov9453
    @andriidanylov9453 ปีที่แล้ว

    Thank You