N-Queens - Backtracking - Leetcode 51 - Python

  Рет қаралды 188,128

NeetCode

NeetCode

Күн бұрын

Пікірлер: 227
@NeetCode
@NeetCode 3 жыл бұрын
🚀 neetcode.io/ - I created a FREE site to make interview prep a lot easier, hope it helps! ❤
@wookyumkim4669
@wookyumkim4669 3 жыл бұрын
I love so much the idea of using posDiag set and negDiag set. That is the truly brilliant trick.
@nameless2850
@nameless2850 2 жыл бұрын
Right? It truly is fascinating
@nachiket9857
@nachiket9857 Жыл бұрын
It's so good, who even comes up with these!
@illu1na
@illu1na Жыл бұрын
@@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
@davidbujosa Жыл бұрын
truly
@demaxl732
@demaxl732 Жыл бұрын
I was fascinated. How can one even think of this!
@Cld136
@Cld136 3 жыл бұрын
Backtracking never been this easy after watching your video! Thanks for the excellent intuition about backtracking.
@harishsn4866
@harishsn4866 2 жыл бұрын
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.
@salehsaeed5734
@salehsaeed5734 3 жыл бұрын
I have been watching several videos on n-queen, your video is the most understandable
@NeetCode
@NeetCode 3 жыл бұрын
Thanks, happy it was helpful! 😃
@CostaKazistov
@CostaKazistov 3 жыл бұрын
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.
@arjunv1624
@arjunv1624 3 жыл бұрын
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.
@rajrsa
@rajrsa Жыл бұрын
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)
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution.
@chaitu2037
@chaitu2037 3 жыл бұрын
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.
@vesicapiscis9717
@vesicapiscis9717 Жыл бұрын
This is the best video on backtracking I've seen so far. It was so good that I applauded after watching it.
@jadkhalil9263
@jadkhalil9263 2 жыл бұрын
Easily the best explanation on the internet thank you so much for your contributions :)
@umutkavakli
@umutkavakli Жыл бұрын
I can't express how this explanation blew my mind! You're the best, thank you.
@frankl9634
@frankl9634 3 жыл бұрын
Thanks!
@NeetCode
@NeetCode 3 жыл бұрын
Hey Frank - thank you so much, I really appreciate it!! 😊
@slygg
@slygg 4 ай бұрын
Altough it's an understandable reflex to use a 2d-array to represent this chess board, since a normal chess board is a matrix, in this case that's subobtimal. Since the problem definition is so that you can have only one queen/row anyways you can just get away with a regular array. When you do this checking for conflicts also becomes less computationally expensive since you can just do this: Let b equal chessBoard, if b[row] == b[i] || abs(b[i] - b[j]) == abs(i - j)), conflict found. This probably doesn't matter for small n but once n gets moderately large every little bit starts to add up, especially if your method is time complexity O(n!) as in the video here.
@symbol767
@symbol767 2 жыл бұрын
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
@karankanojiya7672
@karankanojiya7672 3 жыл бұрын
OMG that diagonal intuition 🤐 Respect ++ Sir!
@NeetCode
@NeetCode 3 жыл бұрын
Thanks! :)
@SameenIslam
@SameenIslam 2 жыл бұрын
You explain difficult to understand concepts with amazing clarity, thank you for your work!
@onlinealias622
@onlinealias622 10 ай бұрын
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
@parthsalat
@parthsalat 7 ай бұрын
Thanks for speaking clearly...was able to watch this on 2x
@LeeK301
@LeeK301 Жыл бұрын
Brilliant solution; I learned a lot from the whole concept of (r+c) and (r-c); really great learning content.
@kwetuligee8087
@kwetuligee8087 3 жыл бұрын
My best explanation of n-queens problem. Thank you!
@Adarsh-mn7pl
@Adarsh-mn7pl 2 жыл бұрын
This is the most cleanest approach to this problem, specially using sets to check Validity
@wessamyaacob1505
@wessamyaacob1505 Жыл бұрын
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. ❤
@NamasteSaurav
@NamasteSaurav Жыл бұрын
Shortest and best solution I have even seen. Thank you @Neetcode
@WBPCS
@WBPCS Жыл бұрын
I learnt something from this video. You explained it very clearly and concisely. Thank you!
@alibagheri
@alibagheri 4 ай бұрын
Can't believe I solved this on my own (after 1.5 hours of thinking)!
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution.
@DanielTruongDev
@DanielTruongDev 2 жыл бұрын
For those who confused what's the purpose of backtrack(0) code, it's basically call the backtrack function starting at row 0
@airatvaliullin8420
@airatvaliullin8420 2 жыл бұрын
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.
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution.
@manojjain3501
@manojjain3501 3 жыл бұрын
Just one word "Genius". What you know belongs to you what you can let other know that is the Talent. Kudos.
@vinaf4494
@vinaf4494 Жыл бұрын
Very helpful! Very clear with explanation in coding as well. You are the best mentor in my learning way!
@carloslazarin
@carloslazarin Жыл бұрын
very clever approach using negative and positive diagonals.. thx a lot for sharing!
@lesterdelacruz5088
@lesterdelacruz5088 8 ай бұрын
the posDiag and the negDiag set is pretty clever. Makes the code so much more concise.
@Karim-nq1be
@Karim-nq1be Жыл бұрын
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.
@bommes9802
@bommes9802 3 күн бұрын
They made us solve this in my freshman year of college 💀 some of these guys never coded a single line in their life before that year lol
@The6thProgrammer
@The6thProgrammer Жыл бұрын
Awesome solution, you simplified what I was trying to do greatly
@VysePresidentGeo
@VysePresidentGeo Жыл бұрын
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!
@tanayasharma7776
@tanayasharma7776 2 жыл бұрын
this is the best explanation i've found so far
@hyk-f4r
@hyk-f4r 2 жыл бұрын
@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.
@eshwarprasad2541
@eshwarprasad2541 2 жыл бұрын
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.
@robyc9545
@robyc9545 2 жыл бұрын
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?
@Cakie-so5gv
@Cakie-so5gv 2 жыл бұрын
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
@amrutaparab4939
@amrutaparab4939 9 ай бұрын
You are a blessing to this world!
@ivantishchenko4686
@ivantishchenko4686 2 жыл бұрын
Superb explanation as usual. Calm and thought out.
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution.
@yassineacherkouk
@yassineacherkouk Жыл бұрын
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.
@ilanaizelman3993
@ilanaizelman3993 3 жыл бұрын
Best explanation I have seen. Thanks!!!
@nuamaaniqbal6373
@nuamaaniqbal6373 2 жыл бұрын
I wish i could break down things as elegantly as u do in ur videos!!
@ameynaik2743
@ameynaik2743 3 жыл бұрын
What is the time complexity of this solution?
@Cakie-so5gv
@Cakie-so5gv 2 жыл бұрын
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
@EranM
@EranM 8 ай бұрын
wow. simply fkn wow with the pos diag neg diag.. such a nice pattern to this.. holy moly. neet! 1337!!
@chliang3499
@chliang3499 Жыл бұрын
pretty genius way to detect collision of diagonal!!
@santhosh20071993
@santhosh20071993 2 жыл бұрын
You Just Nailed the Power of Python.
@leonscander1431
@leonscander1431 4 ай бұрын
Damn, the difficulty is in this diagonal trick, the backtracking itself is pretty straightforward.
@puckwang6850
@puckwang6850 8 ай бұрын
The posDiag and negDiag solution is amazing!
@piglovesasy
@piglovesasy 4 ай бұрын
I like this approach!
@palakjain2505
@palakjain2505 3 ай бұрын
you are amazing! thank god this video exists! I am confused what the time complexity of this approach would be??
@vatsalsharma5791
@vatsalsharma5791 3 жыл бұрын
Much needed ❤️
@sagarchawla4926
@sagarchawla4926 Жыл бұрын
Your explanations are amazing.
@DeGoya
@DeGoya 2 жыл бұрын
The Big O time complexity of his solution is 2^(n*n) I guess because let's take 4 as n. We have 2^n options for the first row which is 2^4 = 16. Then for every option we multiple times 2^4 for the second row and so on. That means we would have 2^n^n which is 2^(n*n).
@summaiyaparveen8730
@summaiyaparveen8730 2 жыл бұрын
Thank You So Much for this amazing Explanation!!
@thisisankitgaur
@thisisankitgaur 3 жыл бұрын
What do you eat man? Seriously, you make Backtracking problems look like a joke. Thanks for the solution!!
@kunafeh
@kunafeh 2 жыл бұрын
Thanks for this amazing explanation. Loved it! 😍
@saswatmishra4055
@saswatmishra4055 2 жыл бұрын
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
@bas5rocker311 2 жыл бұрын
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
@zahraBatenin
@zahraBatenin Ай бұрын
The explanation was great! thanks
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution.
@rishabhnitc
@rishabhnitc 2 жыл бұрын
great, this helped me optimize my otherwise lengthy solution.😍
@Method5440
@Method5440 2 жыл бұрын
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?
@sudeepdalai
@sudeepdalai 2 жыл бұрын
This solution is elegant and ingenious. 🤩🤩
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution.
@pythonfamily
@pythonfamily Жыл бұрын
wow, you nailed it. Thanks a lot
@knightye
@knightye 3 жыл бұрын
the c on line 16 is actually presenting all the rows. Using 'c' is better for visualization
@sushilkhadka8207
@sushilkhadka8207 2 жыл бұрын
Great explaination ...Love from Nepal Hope you upload more videos
@winstonkoh672
@winstonkoh672 2 жыл бұрын
Hi NeetCode, thank you for the amazing explanation
@yinglll7411
@yinglll7411 3 жыл бұрын
For people wondering what's the time complexity for this solution, I guess its O(n*2) because we are essentially taking a brute force approach, trying out all combinations of rows and columns implies (n*n). Please correct me if i'm wrong😇
@veliea5160
@veliea5160 2 жыл бұрын
to me seems like O(N!). because first we have n options, in the second row we have (n-1) options and then (n-2) and so on
@Cakie-so5gv
@Cakie-so5gv 2 жыл бұрын
@@veliea5160don'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
@fredtrentini6791
@fredtrentini6791 Жыл бұрын
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).
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution.
@krisrocker437
@krisrocker437 3 жыл бұрын
Great explanation!!! Keep it up, neetcode!
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution.
@tarangnima4641
@tarangnima4641 7 ай бұрын
Amazing Explanation..💥
@spy9740
@spy9740 3 жыл бұрын
Thanks for the content bro
@zappist751
@zappist751 2 жыл бұрын
Best explanation yet!
@sahilchoudhary1473
@sahilchoudhary1473 Жыл бұрын
You are the best neet code
@nderimbunjaku
@nderimbunjaku 2 жыл бұрын
Great explanation, thank you very much!
@supervince110
@supervince110 2 жыл бұрын
Such an elegant solution!
@Iamnoone56
@Iamnoone56 3 жыл бұрын
what is time complexity? and what is the diff between board = [["."]*n for i in range(n)] board = [["."]*n]*n anyone? Thanks
@denshaSai
@denshaSai 2 жыл бұрын
the second *n, I believe does not make a deep copy, but points to a single of row ['.']
@hamoodhabibi7026
@hamoodhabibi7026 2 жыл бұрын
it's the same
@shivigupta6524
@shivigupta6524 5 ай бұрын
I have a doubt, by your solution, it will consider duplicate chessboard added to your result do you consider only unique solution in your appoarch?
@Eria196
@Eria196 13 күн бұрын
I don't understand... When will the remove functions ever be reached... It's like backtrack(r+1) is stopping them from being reached... Can someone explain to me this... I beg... Am not understanding this solution. Coz r is increasing by one on restrictions. I feel like its going to be equal to n one time n then we shall just return the copy appended in the result
@MohitJayee
@MohitJayee 2 жыл бұрын
Why can't we do column - row for positive diagonal? It also gives 0 as constant value.
@orangethemeow
@orangethemeow 2 жыл бұрын
You made this problem so easy :)
@NeetCode
@NeetCode 2 жыл бұрын
Glad it helped!
@chrisaa100
@chrisaa100 2 жыл бұрын
One Question, Why can't we use regular variable instead of set to track posDiag and NegDiag, Since the values will be same.
@tnmyk_
@tnmyk_ 9 ай бұрын
Excellent explanation!
@imtsrk04
@imtsrk04 7 ай бұрын
GOAT for a Reason!!!
@UnfinishedYara
@UnfinishedYara 3 жыл бұрын
thank you so much youre a hero!
@nhrtsa9010
@nhrtsa9010 3 жыл бұрын
No!!! he's a super hero !
@SurbhiSingh-t2o
@SurbhiSingh-t2o 9 ай бұрын
could you please also explain intuition behind TC ?
@mapo5959
@mapo5959 2 жыл бұрын
genius solution. how do people have the insight to come up with this in anything less than a whole day
@ayushkathpalia8982
@ayushkathpalia8982 2 жыл бұрын
What is the time and space complexity of the above solution ?
@manubachhal404
@manubachhal404 3 жыл бұрын
Now ,i understood why channel name is Neetcode.
@ValhaVaiyagam
@ValhaVaiyagam 6 ай бұрын
Hi Navdeep, Need a help ..how do u draw ? what tool u use ?
@rohanchess8332
@rohanchess8332 Жыл бұрын
I tried writing board = [['.']*n]*n, and rest all the exact same code, but it was giving the wrong output, why?
@disha4545
@disha4545 Жыл бұрын
What would be the time complexity ? O(n*n) ?
@AbyssiniaBenchmark
@AbyssiniaBenchmark Жыл бұрын
Man you are awsome. Really awesome.
@karandhinakaran1420
@karandhinakaran1420 2 жыл бұрын
Great Explanation! Keep up the good work! Just an observation that if we use list instead of set, the code is faster by 6ms and saves about 0.1MB of space.
@mostinho7
@mostinho7 Жыл бұрын
Thanks TODO:- Take notes Backtracking the positions of the queens, but since queens can move horizontally vertically and diagonally, we can’t put two queens together in the same row (because they move horizontally so would attack each other) and also can’t put them in same column or diagonal. So when backtracking, we place queen in a position in row and make recursive call to place the other in next row and keep track of: Column that queen was placed in Both diagonals of the queen (YES there are TWO diagonals that the queen can move in, positive slope and negative slope, so need to keep track of both)
@shoooozzzz
@shoooozzzz 2 жыл бұрын
if you ask this question in an interview, you are what is wrong with the hiring process
@NeetCode
@NeetCode 2 жыл бұрын
true dat
@realworldcodingapplications
@realworldcodingapplications Жыл бұрын
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?
@Eddie-um6cw
@Eddie-um6cw 2 жыл бұрын
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?
@prafulparashar9849
@prafulparashar9849 2 жыл бұрын
Great explanation !! One question though, Any specific reason to use sets? The solution works with lists as well. If anyone have any idea, do let me know.
@NeetCode
@NeetCode 2 жыл бұрын
Mainly because checking if a value exists in a HashSet is O(1) time, but with a list it's O(n).
@prafulparashar9849
@prafulparashar9849 2 жыл бұрын
@@NeetCode Thanks for clarifying, makes so much sense now to use a set in case of these scenarios.
Climbing Stairs - Dynamic Programming - Leetcode 70 - Python
18:08
The N Queens Problem using Backtracking/Recursion - Explained
14:29
Back To Back SWE
Рет қаралды 140 М.
Try this prank with your friends 😂 @karina-kola
00:18
Andrey Grechka
Рет қаралды 9 МЛН
REAL or FAKE? #beatbox #tiktok
01:03
BeatboxJCOP
Рет қаралды 18 МЛН
She made herself an ear of corn from his marmalade candies🌽🌽🌽
00:38
Valja & Maxim Family
Рет қаралды 18 МЛН
Каха и дочка
00:28
К-Media
Рет қаралды 3,4 МЛН
7 Outside The Box Puzzles
12:16
MindYourDecisions
Рет қаралды 219 М.
L14. N-Queens | Leetcode Hard | Backtracking
36:55
take U forward
Рет қаралды 449 М.
Integer to English Words - Leetcode 273 - Python
20:59
NeetCodeIO
Рет қаралды 16 М.
What P vs NP is actually about
17:58
Polylog
Рет қаралды 145 М.
N-Queens Problem | using Backtracking | Leetcode Hard
24:26
Apna College
Рет қаралды 31 М.
Surrounded Regions - Graph - Leetcode 130 - Python
14:50
NeetCode
Рет қаралды 91 М.
Try this prank with your friends 😂 @karina-kola
00:18
Andrey Grechka
Рет қаралды 9 МЛН