LeetCode 48. Rotate Image (Solution Explained)

Поділитися
Вставка
  • Опубліковано 5 жов 2024
  • The Best Place To Learn Anything Coding Related - bit.ly/3MFZLIZ
    Join my free exclusive community built to empower programmers! - www.skool.com/...
    Preparing For Your Coding Interviews? Use These Resources
    --------------------
    (My Course) Data Structures & Algorithms for Coding Interviews - thedailybyte.d...
    AlgoCademy - algocademy.com...
    Daily Coding Interview Questions - bit.ly/3xw1Sqz
    10% Off Of The Best Web Hosting! - hostinger.com/...
    Follow Me on X/Twitter - x.com/nickwhit...
    Follow My Instagram - / nickwwhite
    Other Social Media
    ----------------------------------------------
    Discord - / discord
    Twitch - / nickwhitettv
    TikTok - / nickwhitetiktok
    LinkedIn - / nicholas-w-white
    Show Support
    ------------------------------------------------------------------------------
    Patreon - / nick_white
    PayPal - paypal.me/nick....
    Become A Member - / @nickwhite
    #coding #programming #softwareengineering

КОМЕНТАРІ • 110

  • @luiscortes6563
    @luiscortes6563 4 роки тому +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. 😂

  • @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!

  • @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 4 роки тому +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.

  • @monicawang5024
    @monicawang5024 4 роки тому +31

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

  • @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

  • @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!

  • @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

  • @TheSexGod
    @TheSexGod 5 років тому +20

    great explanation. I got stuck on this one hard until I saw this video.

  • @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

  • @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

  • @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

  • @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.

  • @Asingh42
    @Asingh42 2 місяці тому

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

  • @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.

  • @abdoulbarry8111
    @abdoulbarry8111 2 роки тому

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

  • @shiprashakya6106
    @shiprashakya6106 2 роки тому

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

  • @shrimatkapoor2200
    @shrimatkapoor2200 4 роки тому

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

  • @angelaferro3044
    @angelaferro3044 3 роки тому +1

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

  • @TheIndianChroniclee
    @TheIndianChroniclee 4 роки тому

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

  • @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

  • @MP-ny3ep
    @MP-ny3ep 7 місяців тому

    Amazing explanation! Thank you very much

  • @abhinavkannojia1053
    @abhinavkannojia1053 4 роки тому

    Best explanation by far to this problem.

  • @sarthaksrivastav3408
    @sarthaksrivastav3408 4 роки тому +1

    Excellent explanation. Thank you.

  • @julietgeorge4858
    @julietgeorge4858 4 роки тому +1

    Another great video, Thanks, Nick!

  • @sithumdilanga650
    @sithumdilanga650 Рік тому

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

  • @nithyasubramanian231
    @nithyasubramanian231 3 роки тому

    Love it! Such an elegant solution

  • @pradiptahafid
    @pradiptahafid Рік тому

    this is brilliant and doable. Thanks!

  • @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.

  • @prassifromdec10
    @prassifromdec10 2 роки тому

    the best solution so far!

  • @sujitha2339
    @sujitha2339 2 роки тому

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

  • @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.

  • @pretty_in_scarlet
    @pretty_in_scarlet 3 роки тому

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

  • @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

  • @christopherlee3311
    @christopherlee3311 3 роки тому

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

  • @Ben-pb7ct
    @Ben-pb7ct 3 роки тому

    Great Explanation and very clean code !

  • @georgechen1124
    @georgechen1124 4 роки тому

    excellent explanation and solution Nick! more video pls

  • @niraiarasu131
    @niraiarasu131 4 роки тому +2

    what if we just reverse each row in the second loop

  • @Darkblaze371
    @Darkblaze371 4 роки тому

    Made this so simple thanks!

  • @genghisda236
    @genghisda236 4 роки тому

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

  • @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

  • @krishnanigalye1173
    @krishnanigalye1173 4 роки тому

    super easy solution bro. Thanks a ton!

  • @alregith
    @alregith 4 роки тому

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

  • @Chloe-si2hq
    @Chloe-si2hq 2 роки тому

    Thank you Nick!!

  • @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.

  • @SHSelect
    @SHSelect 2 роки тому

    thats sick thanks Nick

  • @Carlos-sy7cv
    @Carlos-sy7cv 4 роки тому

    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.

  • @rohanmaurya4060
    @rohanmaurya4060 4 роки тому +1

    just awesome man just awesome

  • @magicundercover
    @magicundercover 4 роки тому

    Great explanation, thanks

  • @asifnawaz3454
    @asifnawaz3454 4 роки тому

    you made it easy.....
    Thanks

  • @ForCodingInterview
    @ForCodingInterview 3 роки тому

    Great Explanation!!!! As always :)

  • @qwarlockz8017
    @qwarlockz8017 4 роки тому

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

    • @qwarlockz8017
      @qwarlockz8017 4 роки тому

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

  • @DasBeatz
    @DasBeatz 4 роки тому

    Nice solution!

  • @tarunk57
    @tarunk57 3 роки тому

    bro thanks for everything

  • @user-kh2od5bw3u
    @user-kh2od5bw3u 4 роки тому +1

    Thanks!

  • @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

  • @andriidanylov9453
    @andriidanylov9453 Рік тому

    Thank You

  • @sarvarjuraev1376
    @sarvarjuraev1376 3 місяці тому

    Thanks man

  • @vk1618
    @vk1618 4 роки тому

    Good question

  • @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.

  • @KogutDV
    @KogutDV 3 роки тому

    TNX man!

  • @shankhadeepbanerjee4980
    @shankhadeepbanerjee4980 4 роки тому

    Thanks bro

  • @imranimmu4714
    @imranimmu4714 2 роки тому

    Thank u

  • @brrrkit
    @brrrkit 4 роки тому

    1:50 code real fine

  • @himanshudhiman5424
    @himanshudhiman5424 3 роки тому

    thanks bruh

  • @sakthim7160
    @sakthim7160 4 роки тому

    Great video❤

  • @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 4 роки тому

      ​@@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).

  • @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);
    }
    }

  • @shusenacademy
    @shusenacademy 4 роки тому

    Oh, man, you are awesome

  • @kervensjasmin1508
    @kervensjasmin1508 3 роки тому

    I feel less stupid. Thanks

  • @jwolfe890
    @jwolfe890 2 роки тому

    cool trick.

  • @adilkapadia8237
    @adilkapadia8237 4 роки тому

    nice vid!

  • @kedikebba6441
    @kedikebba6441 4 роки тому

    Champ!

  • @SARDARIN
    @SARDARIN 2 роки тому +1

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

  • @daeshavvn
    @daeshavvn 3 роки тому

    Thank you