Rotate Image - Matrix - Leetcode 48

  Рет қаралды 215,305

NeetCode

NeetCode

Күн бұрын

Пікірлер: 283
@NeetCode
@NeetCode 2 жыл бұрын
🚀 neetcode.io/ - A better way to prepare for Coding Interviews
@meowmaple
@meowmaple 2 жыл бұрын
This is a clear explanation, but definitely still not the simplest. For me, the most straightforward method is to transpose the matrix and reverse each row. The code is simple and short. #transpose for row in range(len(matrix)): for col in range(row,len(matrix)): temp = matrix[row][col] matrix[row][col] = matrix[col][row] matrix[col][row] = temp #reverse for row in matrix: row.reverse() Accepted by leetcode.
@almasmirzakhmetov8590
@almasmirzakhmetov8590 2 жыл бұрын
excellent solution. By the way your solution is based on rotation matrix, right? For 90 degree, we have (x,y) -> (y,x) en.wikipedia.org/wiki/Rotation_matrix
@Rahul-pr1zr
@Rahul-pr1zr 2 жыл бұрын
How do you even get the idea to transpose and then reverse? I agree that implementation is easier but the idea doesn't seem that simple.
@333jjjjjj
@333jjjjjj 2 жыл бұрын
@@Rahul-pr1zr You need to recall it from your linear algebra class. Good luck if that was more than a few months ago or never.
@peterpace3379
@peterpace3379 2 жыл бұрын
@@333jjjjjj for me it was a whole year ago lmao
@przemysawpobrotyn1195
@przemysawpobrotyn1195 Жыл бұрын
I have another solution in similar vein. I came up with it by eyeballing the leetcode provided input/output samples and noticing that the firs element of the last row of the input is the first element of the first row of the output, the second element of the last row of the input is the first element of the second row of the output etc. thus n = len(matrix) for row in matrix[::-1]: for i in range(n): element = row.pop(0) matrix[i].append(element) also does the job ;)
@srinadhp
@srinadhp 2 жыл бұрын
This has been one of the toughest problems for me. Very hard to visualize and always used to make mistakes even after multiple attempts. The way that you explained the approach is THE BEST. You made it so crystal clear in visualizing the solution. Thank you so much!
@sidkapoor9085
@sidkapoor9085 2 жыл бұрын
I found it way easier, almost trivial when I stopped looking at the "2D matrix" and just at the input and output lists.
@caniaccombo123
@caniaccombo123 2 жыл бұрын
@@sidkapoor9085 mind blown
@markomekjavic
@markomekjavic 2 жыл бұрын
I honestly think this is a Hard problem when it comes to implementation.. you can see the idea but coming up with the double pointer approach and a loop, thats a different story!
@huansir1922
@huansir1922 Жыл бұрын
@@markomekjavic yes,coming up with the double pointer approach , it seems hard
@princeanthony8525
@princeanthony8525 Жыл бұрын
Same here.
@doublegdog
@doublegdog 2 жыл бұрын
Just got an offer at amazon. Your videos rock and helped me out so much!
@NeetCode
@NeetCode 2 жыл бұрын
Congratulations 🎉
@MsSkip60
@MsSkip60 3 жыл бұрын
Thanks a lot for the content mate! No offence to others but I really like your clear accent and structured material which is easy to follow. Hope you keep up posting!
@xqfang3171
@xqfang3171 2 жыл бұрын
This is the best explanation for this problem. Crystal clear visualization, elegant code. Great job. Thank you so much for posting!
@NeetCode
@NeetCode 2 жыл бұрын
Happy it was helpful! :)
@d1rtyharry378
@d1rtyharry378 2 жыл бұрын
Bro what an structured approach . Really loved your way of teaching man! You made it look so easy.
@NeetCode
@NeetCode 2 жыл бұрын
Thanks!
@parthpatel8532
@parthpatel8532 Жыл бұрын
Although this is a good way to do it, I found my way to be a bit simpler once you understand matrix manipulation. Rotating a matrix by 90⁰ is equivalent to flipping the matrix diagonally and then flipping it vertically. First try it out with paper, and once u get it, it's really easy. It doesn't save runtime or anything, but I find it easier in terms of code than to move 4 things at a time layer by layer.
@jim5621
@jim5621 Жыл бұрын
Brilliant idea. But this solution takes 2x time since you need to loop through the matrix twice. But the time complexity is still O(n) though. Good thinking!
@brainmaxxing1
@brainmaxxing1 10 ай бұрын
​@@jim5621 "This solution takes 2x time" isn't actually true. Because of things like cache locality, where the elements that are in the same row will be closer to operate on for the CPU, it's not possible to say that the element-wise method is faster. The profiling method actually worked about 25% faster from tests on my computer!
@annieonee
@annieonee 2 жыл бұрын
This is the best explanation of this problem so I've found. Thank you so much for the content! Keep up the good work 👏
@lottexy
@lottexy 2 жыл бұрын
I gotta say your videos are amazing. I've been grinding LC for the past 3 weeks, I went from struggling to solve even 1 question on the weekly leetcode contest to solving 2 - 3 questions each week. Thank you so much. I've also and will always share your videos and excel sheet on reddit whenever people ask for leetcode tips. Oh and its abit late but congrats on the Google offer! I hope to one day get into google as well or any other company tbh ( my current tech job kinda blows ) ...
@suraj8092
@suraj8092 2 жыл бұрын
Good luck!
@jananiadanurrammohan9795
@jananiadanurrammohan9795 2 жыл бұрын
Best explanation one could ever give for a problem!!!. Thank you for the effort and time you are putting into making all these videos.
@sumosam1980
@sumosam1980 3 жыл бұрын
Your videos are excellent. You do a great job of being super clear! I often come here to Neetcode to see if you have the solution as it is better than the official explanation. Keep up the great work!
@ishaanjain4973
@ishaanjain4973 Жыл бұрын
I cant explain you how much this channel helps me !! Other channels just tell the transpose method which is not so intuitive, you always tell solutions which I can think in future in real interviews and exams. Thanks a lot Neetcode !! Keep up the good work man
@sureshgarine
@sureshgarine 2 жыл бұрын
I really like the way u handled minimizing the temp variable swap. very well explained. Thank you so much.
@sanidhyax
@sanidhyax 13 күн бұрын
This is so elegant. Have solved multiple of 2d array problems but never thought of accessing the rows literally by [bottom[[R] and [top][L]
@emanawel9224
@emanawel9224 2 жыл бұрын
This code makes the problem look way easier than it is! Love the code and explanation.
@chichiem2397
@chichiem2397 Жыл бұрын
These videos are great, this one in particular is perfect. I struggled with this a lot until I checked out this video. Awesome stuff!
@seungjunlee00
@seungjunlee00 2 жыл бұрын
Thank you so much for the straightforward and clear answer!
@alinisar87
@alinisar87 3 жыл бұрын
Beautiful solution, great explanation. Thank you so much.
@himanshubansal7040
@himanshubansal7040 Жыл бұрын
This is a beautiful way to write the code for this tricky problem. Kudos!!
@ElijahGeorge
@ElijahGeorge 2 жыл бұрын
This is a very intuitive explanation. Thanks so much!!
@jimmycheong7970
@jimmycheong7970 2 жыл бұрын
This is a freaking amazing explanation. Thank you so much for sharing!
@bruce716
@bruce716 2 жыл бұрын
Thanks for the details and it is really easier to understand the concept with your good variable naming convention.
@codewithtejesh1284
@codewithtejesh1284 2 жыл бұрын
thanks a lot, great explanation! i stopped my leetcode subscription , now i am just watching your videos and solving question.
@Cruzylife
@Cruzylife 2 жыл бұрын
wow this explanation was so clear and the code was so clean!!
@nayandhabarde
@nayandhabarde 3 жыл бұрын
Good work with comments and simplicity!
@mykytapiskarov7291
@mykytapiskarov7291 2 жыл бұрын
Amazing solution and explanaition! I spent about 2 hours trying to understand leetcode "Rotate group of 4" solution - but no luck. Here 15 minutes - and it's clear.
@jasonngan5747
@jasonngan5747 2 жыл бұрын
This is super useful, thanks for the great work!
@nayanachandran7072
@nayanachandran7072 2 жыл бұрын
I must've have tried to understand this problem atleast 10 times and always failing to remember it. I now know I will never forget it! Thanks!
@krishnateja6428
@krishnateja6428 8 ай бұрын
Cleanest explanation I have ever seen. Thank you!
@karthikjayaraman9646
@karthikjayaraman9646 3 жыл бұрын
Excellent article. Keep'em coming!
@bondinthepond
@bondinthepond 2 жыл бұрын
Amazing approach - very structured! and of course backed by great visualization!! You've got a subscriber, just based on this!! :)
@leonfeng4006
@leonfeng4006 2 жыл бұрын
please continue to make more videos, this channel is pure gold
@dineshraj5957
@dineshraj5957 10 ай бұрын
The best explanation by far of the layer rotation method. Damn it. The best!!
@anooppatils
@anooppatils 2 жыл бұрын
Awesome Explanation. Just loved it. Keep up the good work :)
@nikiforovsansanich
@nikiforovsansanich Жыл бұрын
Perfect explanation! Thank you!
@bilalahmedkhan9518
@bilalahmedkhan9518 Жыл бұрын
I thought this was a very though problem but you made it so easy for me. Thank you!
@FreeMayaTutorials
@FreeMayaTutorials 3 жыл бұрын
Thanks for posting, this is great!
@sanketkoli8641
@sanketkoli8641 Жыл бұрын
Very nice explanation. Thanks NeetCode!
@mr.anonymous6098
@mr.anonymous6098 2 жыл бұрын
Perfect Solution. When I first read the solution in the Cracking the coding interview book, I spent quite a lot of time and still could not understand it. You really simplified the logic which is so much easier to follow! Great Job, man
@akifozkan5065
@akifozkan5065 2 жыл бұрын
made it look like so simple, great explanation
@suhasdon1
@suhasdon1 3 жыл бұрын
Thank you. Best explanation without having to deal with 2 for loops with i, j or recursion and all other BS to be worried about.
@reaiswaryaa
@reaiswaryaa 2 жыл бұрын
Wow what an amazing explanation. Thank you !
@TheMzbac
@TheMzbac 2 жыл бұрын
Very clearly explained, thank you
@dollyvishwakarma2
@dollyvishwakarma2 2 жыл бұрын
No doubt I love your simple algos but this one can be done in a much simpler way which is to reverse the matrix row wise and then swapping the elements like we do for a transpose. Kudos to the great work you do :)
@user-xg2wj4dy5f
@user-xg2wj4dy5f Жыл бұрын
But to do that you will have to create another matrix which is the copy of the Matrix which is to be transposed and that is against the constraints of the question you have to work in the same Matrix
@niteshsetin
@niteshsetin 2 жыл бұрын
The explanation was awesome and helpful to understand the problem effectively. I was waiting to see the final input output but nevertheless the code is correct so i guess i will write and check myself 😁😊
@ChocolateMilkCultLeader
@ChocolateMilkCultLeader 2 жыл бұрын
Your code was really elegant. Well done
@anxonpues6018
@anxonpues6018 20 күн бұрын
Good, explanation, improoving steps ... really golden pedagogical
@suvrobanerjee2399
@suvrobanerjee2399 Жыл бұрын
Thanks for such a clear explanation.
@algorithmimplementer415
@algorithmimplementer415 2 жыл бұрын
This is the best explanation!!
@PavelBogart
@PavelBogart 2 жыл бұрын
love it. thank you!
@yasharma2301
@yasharma2301 2 жыл бұрын
Knew the O(2*n^2) solution using transpose followed by inversion, thanks for this great one pass solution.
@kwaminaessuahmensah8920
@kwaminaessuahmensah8920 2 жыл бұрын
Mans went into god mode swapping the elements in reverse
@AshishSarin1
@AshishSarin1 2 жыл бұрын
Thanks for this explanation. Really liked it.
@NeetCode
@NeetCode 2 жыл бұрын
Thank you so much!! Glad it was helpful!
@yabgdouglas6032
@yabgdouglas6032 11 ай бұрын
my ego has made me attempt this problem almost 3 hours - thank you for this clean explanation!
@harishsn4866
@harishsn4866 Жыл бұрын
Thank you so much. You're the best.
@vaibhavkhanna2922
@vaibhavkhanna2922 Жыл бұрын
Great approach! Here you can see if you are confused with variable naming I have used some easy to understand names.Approach is still the same. void rotate(vector &matrix) { int size = matrix.size(); int startRow = 0; int startColumn = 0; int endRow = matrix.size() - 1; int endColumn = matrix.size() - 1; while (startRow < endRow && startColumn < endColumn) { int current_column_for_start_row = startColumn; int current_row_for_end_Column = startRow; int current_column_for_end_row = endColumn; int current_row_for_start_column = endRow; int current_size = endColumn - startColumn; for (int i = 0; i < current_size; i++) { int temp = matrix[startRow][current_column_for_start_row]; matrix[startRow][current_column_for_start_row] = matrix[current_row_for_start_column][startColumn]; matrix[current_row_for_start_column][startColumn] = matrix[endRow][current_column_for_end_row]; matrix[endRow][current_column_for_end_row] = matrix[current_row_for_end_Column][endColumn]; matrix[current_row_for_end_Column][endColumn] = temp; current_column_for_start_row++; current_row_for_end_Column++; current_column_for_end_row--; current_row_for_start_column--; } startRow++; startColumn++; endRow--; endColumn--; } }
@itspete2444
@itspete2444 3 ай бұрын
"This is still a square if you tilt your head enough" - that got me laughing harder than it should have
@nilkamalthakuria4030
@nilkamalthakuria4030 3 жыл бұрын
Great explanation
@MinhNguyen-lz1pg
@MinhNguyen-lz1pg Жыл бұрын
Another great explanation my dude !
@Omar-hw7zi
@Omar-hw7zi 3 жыл бұрын
WOW, really neat!!
@pengmick2046
@pengmick2046 Жыл бұрын
Your explanation is so good
@suchitranagarajan7715
@suchitranagarajan7715 2 жыл бұрын
Great explanation!!!
@pleasedontsubscribeme4397
@pleasedontsubscribeme4397 2 жыл бұрын
Best of the best solution!
@Raj_Patel21
@Raj_Patel21 3 жыл бұрын
Awesome !!!!
@stith_pragya
@stith_pragya Жыл бұрын
Thank You Brother for this amazing video.............🙏🙏🙏🙏🙏🙏
@DanielTruongDev
@DanielTruongDev 2 жыл бұрын
Great explanation, however if you recalled from Linear Algebra, this is basically transpose the matrix so (row,col) becomes (col,row). So here's a shorter solution in Python rows = len(matrix) matrix.reverse() #Reverse the matrix for r in range(rows): for c in range(r,rows): matrix[r][c], matrix[c][r] = matrix[c][r], matrix[r][c] #Transpose
@dinamohamed13600
@dinamohamed13600 Жыл бұрын
fantastic teacher!
@navenkumarduraisamy6260
@navenkumarduraisamy6260 3 жыл бұрын
I really wish I had such clear approach
@wij8044
@wij8044 8 ай бұрын
Easier solution for nXn matrix! Neetcode solution may be better suited for nXm matrix. function rotate(matrix: number[][]): void { const n = matrix.length; // Transpose the matrix, starting from i = 1 for (let i = 1; i < n; i++) { for (let j = i; j < n; j++) { [matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]]; } } // Reverse each row for (let i = 0; i < n; i++) { matrix[i].reverse(); } }
@eugenesol2074
@eugenesol2074 2 ай бұрын
Nice, thanks for that
@user-dk5mu4qp4s
@user-dk5mu4qp4s 2 жыл бұрын
You are so genius!!
@aaronpuah918
@aaronpuah918 2 жыл бұрын
You really are the Bob Ross of LeetCode XD
@nareshnaklak6111
@nareshnaklak6111 3 жыл бұрын
awesome explanation.. thanks (Y)
@ledinhanhtan
@ledinhanhtan Жыл бұрын
Beautiful code~
@RandomShowerThoughts
@RandomShowerThoughts Жыл бұрын
very intuitive
@Quantumstream
@Quantumstream 2 жыл бұрын
Thanks!
@IncrementalNova
@IncrementalNova 2 жыл бұрын
Great content Bro :) Solution in Java: class Solution { public void rotate(int[][] matrix) { int n = matrix.length; int right=n-1, left=0; //neetcode solution video while(left
@sebastian_tec
@sebastian_tec 2 жыл бұрын
@theraplounge because as you enter in the inner loops the offset, or the amout that you have to add/subtract for the rotation decreases. in the video for the outer matrix the offset can be as much as 2, but in the inner matrix that offset is 0.
@inspiredomkar1239
@inspiredomkar1239 Жыл бұрын
Thanks. I was looking for it.
@menzeus4293
@menzeus4293 2 жыл бұрын
genius solution!
@dillondalton2989
@dillondalton2989 3 жыл бұрын
beautiful code
@Michael-zh3op
@Michael-zh3op 14 күн бұрын
After playing around with matrices, this question was a cake walk.
@prithvini04
@prithvini04 2 жыл бұрын
video is so helpful.
@rentianxiang92
@rentianxiang92 2 жыл бұрын
you are awesome!
@ShivangiSingh-wc3gk
@ShivangiSingh-wc3gk 2 жыл бұрын
Nice, explanation. I thought the same thing but got thrown off on how to get the indexes
@TechOnScreen
@TechOnScreen Жыл бұрын
amazing !
@Blobtheblobfish
@Blobtheblobfish 3 жыл бұрын
Here is a js solution const rotate = (matrix) => { let left = 0; // number of columns - 1, // also think, actual position of right let right = matrix.length - 1; while (left < right) { for (let i = 0; i < right - left; i++) { let top = left; let bottom = right; let topLeft = matrix[top][left + i]; matrix[top][left + i] = matrix[bottom - i][left]; matrix[bottom - i][left] = matrix[bottom][right - i]; matrix[bottom][right - i] = matrix[top + i][right]; matrix[top + i][right] = topLeft; } left++; right--; } }; yes I know, py and JS are about as close to languages as you can get but for anyone new or may not understand the small differences between py and JS, here is your answer. NeetCode, thank you, your explanation was thorough and also less than 15 minutes which is great.
@siddharthgupta6162
@siddharthgupta6162 2 жыл бұрын
This video is so so so (X100) much better than the leetcode's solutions on this problem.
@KaushikChavali
@KaushikChavali Жыл бұрын
I like the intuitively named variables.
@MahfujurRahmanAraf
@MahfujurRahmanAraf Жыл бұрын
Dude you are amazing
@NeetCode
@NeetCode Жыл бұрын
Thank you 🙏
@burburchacha
@burburchacha 7 ай бұрын
I hope you realise that you have a gift in explaining difficult concepts
@devenlad
@devenlad Жыл бұрын
Really good explanation
@NeetCode
@NeetCode Жыл бұрын
Glad it was helpful!
@prankobano9076
@prankobano9076 Жыл бұрын
Cool beans dude!
@sunnyding602
@sunnyding602 Жыл бұрын
Thanks for the clear explanation. I can understand it while I am in a food coma. lol
@peterosi192
@peterosi192 Жыл бұрын
Now this... I like!
@huimingli9207
@huimingli9207 Жыл бұрын
This is really a pure math problem. rotating a cell 90 degree, the index/coordinate change is from (x,y) -> (y, n-1-x).
@shantanushende6
@shantanushende6 2 жыл бұрын
Legendary.
@welcomb
@welcomb 2 жыл бұрын
There a very easy way to do this. First transpose the matrix, which is just flipping along a diagonal in-place. Then reflect vertically, which is another simple in-place swap.
@Qxismylife
@Qxismylife 2 жыл бұрын
I am thinking about the same. But the problem is we don't know if this is allowed, at least for the purpose of what this question is examining. If this is allowed then you can also use the 2D rotation matrix too.
@Qxismylife
@Qxismylife 2 жыл бұрын
Just saw other comments. This is allowed. I am happy now.
@welcomb
@welcomb 2 жыл бұрын
@@Qxismylife using a 2D rotation matrix may not be inplace as you need extra space for the matrix. Transpose and flip can both be done inplace
@josecarlosfontanesikling306
@josecarlosfontanesikling306 Жыл бұрын
It's possible to do this without any extra memory at all. Suppose you have variables x and y. You can swap them like this y=y+x x=y-x y=y-x This is all you need to transpose a matrix and to swap columns or rows. This rotation is just a transposition followed by inverting the order of the rows.
@symbol767
@symbol767 2 жыл бұрын
This shows me how many people in the comments don't even try the solution themselves. I tried the solution in this video on leetcode and it doesn't pass the test cases.
@davidteklea1032
@davidteklea1032 4 ай бұрын
I tried it, it passes.
@johnlocke4695
@johnlocke4695 2 жыл бұрын
There is no way I could have figured this out myself. Not even if they give me a million years time.
Spiral Matrix - Microsoft Interview Question - Leetcode 54
16:46
Rotate Matrix/Image by 90 Degrees | Brute - Optimal
17:47
take U forward
Рет қаралды 169 М.
Final muy increíble 😱
00:46
Juan De Dios Pantoja 2
Рет қаралды 54 МЛН
1 or 2?🐄
00:12
Kan Andrey
Рет қаралды 52 МЛН
HOW DID HE WIN? 😱
00:33
Topper Guild
Рет қаралды 40 МЛН
Set Matrix Zeroes - In-place - Leetcode 73
18:05
NeetCode
Рет қаралды 118 М.
How I would learn Leetcode if I could start over
18:03
NeetCodeIO
Рет қаралды 322 М.
10 Math Concepts for Programmers
9:32
Fireship
Рет қаралды 1,8 МЛН
How to Solve ANY LeetCode Problem (Step-by-Step)
12:37
Codebagel
Рет қаралды 129 М.
5 Useful F-String Tricks In Python
10:02
Indently
Рет қаралды 274 М.
8 patterns to solve 80% Leetcode problems
7:30
Sahil & Sarra
Рет қаралды 237 М.
All 39 Python Keywords Explained
34:08
Indently
Рет қаралды 129 М.
Spiral Matrix II - Leetcode 59 - Python
16:02
NeetCodeIO
Рет қаралды 9 М.
НЕ ПОКУПАЙ СМАРТФОН, ПОКА НЕ УЗНАЕШЬ ЭТО! Не ошибись с выбором…
15:23
Tag her 🤭💞 #miniphone #smartphone #iphone #samsung #fyp
0:11
Pockify™
Рет қаралды 38 МЛН
Игровой Комп с Авито за 4500р
1:00
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 2,1 МЛН
Здесь упор в процессор
18:02
Рома, Просто Рома
Рет қаралды 265 М.
Как правильно выключать звук на телефоне?
0:17
Люди.Идеи, общественная организация
Рет қаралды 727 М.
Clicks чехол-клавиатура для iPhone ⌨️
0:59
Зачем ЭТО электрику? #секрет #прибор #энерголикбез
0:56
Александр Мальков
Рет қаралды 57 М.