N-Queens - Backtracking - Leetcode 51 - Python
Ғылым және технология
🚀 neetcode.io/ - A better way to prepare for Coding Interviews
🐦 Twitter: / neetcode1
🥷 Discord: / discord
🐮 Support the channel: / neetcode
Twitter: / neetcode1
Discord: / discord
⭐ BLIND-75 PLAYLIST: • Two Sum - Leetcode 1 -...
💡 CODING SOLUTIONS: • Coding Interview Solut...
💡 DYNAMIC PROGRAMMING PLAYLIST: • House Robber - Leetco...
🌲 TREE PLAYLIST: • Invert Binary Tree - D...
💡 GRAPH PLAYLIST: • Course Schedule - Grap...
💡 BACKTRACKING PLAYLIST: • Word Search - Backtrac...
💡 LINKED LIST PLAYLIST: • Reverse Linked List - ...
Problem Link: neetcode.io/problems/n-queens
0:00 - Read the problem
3:56 - Drawing Explanation
12:27 - Coding Explanation
leetcode 51
This question was identified as an interview question from here: github.com/xizhengszhang/Leet...
#backtracking #python
Disclosure: Some of the links above may be affiliate links, from which I may earn a small commission.
Пікірлер: 178
🚀 neetcode.io/ - I created a FREE site to make interview prep a lot easier, hope it helps! ❤
I love so much the idea of using posDiag set and negDiag set. That is the truly brilliant trick.
@nameless2850
2 жыл бұрын
Right? It truly is fascinating
@nachiket9857
11 ай бұрын
It's so good, who even comes up with these!
@illu1na
9 ай бұрын
@@nachiket9857 y = mx + c and for posDiag y = -x + c so c = y +x, and negDiag y = x +c so c = y-x. Note that the gradient is -1 for posDiag and 1 for negDiag since the given array starts 0 top row and increases as it goes down.
@davidbujosa
8 ай бұрын
truly
@demaxl732
6 ай бұрын
I was fascinated. How can one even think of this!
Backtracking never been this easy after watching your video! Thanks for the excellent intuition about backtracking.
such an elegant and simple solution without having to pass through loads of different function unlike other videos I've seen. Thank you for this.
I was a bit confused by the problem statement, but your explanation made it looks as simple as possible. Thanks for making such amazing content.
This is the best video on backtracking I've seen so far. It was so good that I applauded after watching it.
Amazing, I've seen a couple other variant, but this version is easy, yet really captures the spirit of backtracking without hard to understand tricks
You explain difficult to understand concepts with amazing clarity, thank you for your work!
Like the clear explanation of the problem and the code walkthrough. Please provide your analysis on the time/space complexity for each problem you are solving.
AWESOME! The best channel every for explaining problem-solving questions and how to think about them, rather than just throwing the solutions in front of the audiences. ❤
Easily the best explanation on the internet thank you so much for your contributions :)
I can't express how this explanation blew my mind! You're the best, thank you.
My best explanation of n-queens problem. Thank you!
I had seen this problem for the first time about 7 years ago in uni and I was too scared to even attempt it. Thanks for explaining it so beautifully and helping me conquer my fear. (I was so stupid to be scared of this problem lol)
I have been watching several videos on n-queen, your video is the most understandable
@NeetCode
2 жыл бұрын
Thanks, happy it was helpful! 😃
@CostaKazistov
2 жыл бұрын
When I am stuck on a problem, I like to watch 2-3 videos from different channels. Then it "clicks". Most success I had when it "clicks" on the first go, is when I watch NeetCode.
Awesome, I solved it by using a helper to iterate through the rows then columns, then diags each separately O(N) for each of those loops, but this way is much better. Thanks man
Awesome! Mistakenly I used to iterate through all squares in a nested for-loop (similar to how we solve sudoku using backtracking). Now I see that there's no need in that.
I started doing this problem and it was tricky, but the first part of the vid set me on the right track to code it up myself. Thanks bro
While I was able to solve this myself quite easily, the use of sets - particularly the posDiag and negDiag sets - are incredibly elegant and I appreciate the tip. Thank you so much for your help!
This is the most cleanest approach to this problem, specially using sets to check Validity
I learnt something from this video. You explained it very clearly and concisely. Thank you!
Shortest and best solution I have even seen. Thank you @Neetcode
Very helpful! Very clear with explanation in coding as well. You are the best mentor in my learning way!
very clever approach using negative and positive diagonals.. thx a lot for sharing!
Awesome solution, you simplified what I was trying to do greatly
@Neetcode you are amazing as always just want to let you know I appreciate your channel and big thank you for these videos. If at all I clear the interview I sure will send at-least bag of chocolates to you.
Superb explanation as usual. Calm and thought out.
Thanks for speaking clearly...was able to watch this on 2x
Best explanation I have seen. Thanks!!!
Much needed ❤️
I wish i could break down things as elegantly as u do in ur videos!!
Thank You So Much for this amazing Explanation!!
Thanks for this amazing explanation. Loved it! 😍
This explanation is simple and to the point. Loved it. Can you make a video on how to frame backtracking logic for any unseen backtracking question. How to frame the logic.
this is the best explanation i've found so far
Great explanation!!! Keep it up, neetcode!
OMG that diagonal intuition 🤐 Respect ++ Sir!
@NeetCode
2 жыл бұрын
Thanks! :)
You are a blessing to this world!
great, this helped me optimize my otherwise lengthy solution.😍
Hi NeetCode, thank you for the amazing explanation
I find this solution beautiful, and your explanation is very clear as usual, but at the same time it's not that obvious to see what's going on for the execution stack. Thank you again.
Brilliant solution; I learned a lot from the whole concept of (r+c) and (r-c); really great learning content.
Thanks for the content bro
Great explanation, thank you very much!
wow, you nailed it. Thanks a lot
Your explanations are amazing.
Always after i came up with the brute force algorithm with some optimization i always come back to the channel to see how the work is done.
Excellent explanation!
pretty genius way to detect collision of diagonal!!
In terms of the time complexity, don't forget cloning the memory of the board (n^2), except for it, I think the time complexity would be O(n*n!), cuz your tree has n layers, n! is just the number of the bottom level, so the total time complexity I think is O(n!*n + n!*n^2) = O(n!*n^2), that's why the bounce of n is pretty tiny (1
the posDiag and the negDiag set is pretty clever. Makes the code so much more concise.
Great video!
Thank you so much again!
Amazing Explanation..💥
This solution is elegant and ingenious. 🤩🤩
Great explaination ...Love from Nepal Hope you upload more videos
Simply the best :)
Best explanation yet!
Such an elegant solution!
thank you this was very helpful
You Just Nailed the Power of Python.
For those who confused what's the purpose of backtrack(0) code, it's basically call the backtrack function starting at row 0
This dude is a legend. Was wondering how you come up with this solution? Did you learn this at school? Do you consult with any resources?
This is art
thank you so much youre a hero!
@nhrtsa9010
2 жыл бұрын
No!!! he's a super hero !
Man you are awsome. Really awesome.
the c on line 16 is actually presenting all the rows. Using 'c' is better for visualization
Just brilliant :)
I don't understand this part: res.append (copy) return Can anyone help me what does that return mean? Does it return nothing or smt?
You made this problem so easy :)
@NeetCode
2 жыл бұрын
Glad it helped!
Your videos are really great. May I know what is the significance of using a set.
The posDiag and negDiag solution is amazing!
You are the best neet code
GOAT for a Reason!!!
Amazing explaination
i have a doubt..why do we have to do a clean up after calling the first backtrack function(why do we need to remove all the cols and set the board[r][c] again to "."?
@bas5rocker311
Жыл бұрын
this is because we need to check if any other ways of placing the Queen exists. So the sets would be used to keep track of only one Queen before the current row
What is the time complexity of this solution?
@Lan-so5gv
Жыл бұрын
In terms of the time complexity, don't forget cloning the memory of the board (n^2), except for it, I think the time complexity would be O(n x n!), cuz your tree has n layers, n! is just the number of the bottom level, so the total time complexity I think is O(n!*n + n!*n^2) = O(n!*n^2), that's why the bounce of n is pretty tiny (1
Thanks!
@NeetCode
2 жыл бұрын
Hey Frank - thank you so much, I really appreciate it!! 😊
I see why we have to keep track of the column, posDiag and negDiag for each placement of the queen. Is the fact that queen placement also excludes the row hidden by the fact that we’re recursing over the rows atomically?
Great explanation
It's insane to me how leetcode hard problems have such peculiar domain-specific techniques. I just solved that problem but I had no idea about the posDiag / negDiag pattern and I don't think I would figure it out on my own either, what I did instead was using a cached function that returns a single set with all the "forbidden" (i, j) positions, which led me to a ~3000ms solution rather than a ~60ms solution (good enough I guess but definitely not ideal).
What is the time and space complexity of the above solution ?
Backtrack is hard for me. I try to learn it by watching your videos
😱🤯excellent !!
One Question, Why can't we use regular variable instead of set to track posDiag and NegDiag, Since the values will be same.
Im getting an error on the part that we're trying to assing board[r][c] = "Q", typerror: str object does not support item assignment Does anyone got the same error?
Finally its here
Hi Navdeep, Need a help ..how do u draw ? what tool u use ?
genius solution. how do people have the insight to come up with this in anything less than a whole day
Why can't we do column - row for positive diagonal? It also gives 0 as constant value.
awesome!
Just one word "Genius". What you know belongs to you what you can let other know that is the Talent. Kudos.
I tried writing board = [['.']*n]*n, and rest all the exact same code, but it was giving the wrong output, why?
what is the time complexity for this?
Now ,i understood why channel name is Neetcode.
This is 2nd backtracking problem I’ve seen, the line I don’t get is the remove line, so you’re adding everything to set just to remove it afterwards?
bro thanks a lot
Great video :)(:
My mind is blown
wow. simply fkn wow with the pos diag neg diag.. such a nice pattern to this.. holy moly. neet! 1337!!