Climbing Stairs (LeetCode 70) | Full solution with animations | Dynamic Easy | Study Algorithms
ฝัง
- เผยแพร่เมื่อ 4 ก.ค. 2024
- Given a staircase with n steps, we need to find the total number of distinct ways to climb it by taking 1 or 2 steps at a time. Sure, this can be done by a brute force method and finding all the possibilities, but there is a really easy way to understand this. This video shows how you can form building blocks and ultimately arrive at a very efficient solution. To make things easy, there is also a dry run of code in JAVA.
Chapters:
00:00 - Intro
01:36 - Problem statement and description
04:51 - Brute Force Method
07:28 - How to understand and attack
09:41 - Finding an efficient solution
12:19 - Dry-run of Code
14:45 - Final Thoughts
Actual problem on LeetCode: leetcode.com/problems/climbin...
📚 Links to topics I talk about in the video:
Dynamic Programming: • Dynamic Programming ea...
Brute Force Solution: • Brute Force algorithms...
What is Big O?: • Big O Notation Simplif...
📘 A text based explanation is available at: studyalgorithms.com
Code on Github: github.com/nikoo28/java-solut...
Test-cases on Github: github.com/nikoo28/java-solut...
📖 Reference Books:
Starting Learn to Code: amzn.to/36pU0JO
Favorite book to understand algorithms: amzn.to/39w3YLS
Favorite book for data structures: amzn.to/3oAVBTk
Get started for interview preparation: amzn.to/39ysbkJ
🔗 To see more videos like this, you can show your support on: www.buymeacoffee.com/studyalg...
🎥 My Recording Gear:
Recording Light: amzn.to/3pAqh8O
Microphone: amzn.to/2MCX7qU
Recording Camera: amzn.to/3alg9Ky
Tablet to sketch and draw: amzn.to/3pM6Bi4
Surface Pen: amzn.to/3pv6tTs
Laptop to edit videos: amzn.to/2LYpMqn
💻 Get Social 💻
Follow on Facebook at: / studyalgos
Follow on Twitter at: / studyalgorithms
Follow on Tumblr at: / studyalgos
Subscribe to RSS feeds: studyalgorithms.com/feed/
Join fan mail: eepurl.com/g9Dadv
#leetcode #programming #interview
I have watched NeetCode, CS Dojo and Kevin Naughton's explanation but couldn't understand the concept behind arr[target] = arr[target-1] + arr[target-2] for this problem until I came across your "How to understand and attack" segment. Thank you for explaining like I'm 5.
I had the same issue. He explained it so much better!
I am just seeing this..I love the explanation...lols....
yes you right
such a lovely solution and explanation
Handsdown the best explanation available on youtube for leetcode 70!
Thanks for your simple explanation.
Great explaination!!
Provides sound explanation of algorithmic approach and solution, indeed worthy channel. Thanks.
Great video! Loved the visuals. You did an excellent job at breaking down the steps needed to approach this problem. Keep it up!
glad you liked it. If you want to see more content like this, consider joining my channel: th-cam.com/channels/T-S2ngqEBoYCM5UKuNeELg.htmljoin
Dude, you nailed it. LOVE YOU!
Glad you enjoyed it 😄
Wowww. Thanks a million bro. After watching many turotials on this, yours is the best! I've understood it! Thanks
Thank you so much, you helped me understand dynamic programming with such a simple explanation and example.
Really excellent explanation, the breakdown of the problem made it much more easier to understand.
Great explanation.Thank you very much
Thank you so much... Best and Easiest explanation ever .
thank you for the great explanation!
This was really helpful!!
Keep up the good work..
Good one, bro. Thank you.
Thank you soo much this is my 1st dp question I'm glad i found good description of it thank a lot you are a great tutor
Omg such an amazing explanation, thank you so much sir 🙏❤️
your explanation skill is too good
Great video ❤
Really well explained.
I read one of comment which was recently posted, but u replied to that comment also,great !!!
I will say just fantastic!
well explained thanks you!!
I tried to solve this problem using recursion but TLE.... And you just gave me best solution .... Thank you so much guru🔥💯❤️🙏
Thank you very much, sir.
Adbhoot. Love your explanation
Awesome explanation
hats off to you sir, excellent explanation, and thnks a lot
Thank you sir!!
it's Amazing explanation . I loved it.❤❤❤❤❤❤❤❤❤❤❤❤
Yours was the best explanation.
Very good way to teach brother very depth understanding of the question very good
great content!
Great explanation! This is my first DP, Memoisation Problem!
you are gonna love dynamic programming. Check out House Robber as well. th-cam.com/video/VXqUQYGMnQg/w-d-xo.html
Great explanation
Your excitement for teaching has no bounds 🙏
thanks for your kind words
Thank you so much sir🎉
If this guy makes a math course it’ll be one of the best.
true..and everyone will start coding.
very nice method of explanation....
Thank you 😊😊
You teach amazing. Thanks for making us understand difficult concepts in a simple way🙂
Glad you feel this way :)
Awesome Explanation bro
Thank you so much 🙂
Man great breakdown of this problem, simply the best!
Your Explanation is very good.
Glad you think so!
Thank you so much!
You're welcome!
Man great breakdown. I'm doing interview prep by grinding on leetcode and your videos have been a great way for me to understand how to solve set problems. You do a great job of talking slowly but not too slow and breaking the problem down that is simple to understand.
same here
just an amazing explanation
Glad you think so!
I was skeptical but in the end you delivered the understanding
glad i could help you
Thanks my bro
Lit 🔥very well explained
You too are awesome 😎
Boss you are a king of coding and the best teacher
Thank you so much
Hey Nikhil, I really liked your way of explanation. keep making such videos. Subscribed.
Thanks for the sub!
just starting my leetCode journey, with no math background, this video helped me so much, thanks a lot!
I wish you all the very best :)
@@nikoo28 thanks!
Thank you so much, first time while I saw the problem, i was like WTH how I am gonna solve this. After seeing your video it's so easy!! ❣
Love it!!! 😁
The way you explained it made it so easy to understand. Thank you, my friend, for helping me in my first dynamic programming question. Love from Haryana.
You're very welcome!
The best explanation i have come across, i have watched other videos of same problem from other instructors , their explanation was also good, but Nikhil the way you've explained is so simple and top notch, thank you very much
really glad you feel that way 😄
thanks very much for explain dp 🤗
Thank you so much 😊
Bro u r really a bro ....
Nice explanation.
Keep watching
thank u..
Best explanation behind the thought process of approaching the problem. I think we can reduce the space complexity to O(1) because we just need to return the value for the number of ways to reach the nth step. So a sliding window approach can also work, which is kinda similar to dynamic programming, but you don't memoize all values, just the previous 2 values and keep updating it.
Excellent
very nice explanantion baat to hai..
observing the output we can also use simple fib program
Nice
I wish you could have been my teacher for dsa! You are a true teacher, this was so simple to follow I want to cry. Thank you so much sir! Please keep making this type of videos they are life savers for people like me! Thank you thank you! Please could you touch upon recursion and tree problems please !
Thank you so much for your kind words. I do have videos on recursion and tree problems. Check out my playlist on algorithmic paradigms. :)
I hope they are helpful too.
@@nikoo28 why array is of n+1 size, why cant n??
Bcz index starts at 0 if you want to calculate the 8 step you need ans of 8th index but if u pick array of size n you would be providing ans of 7th index instead of 8@@santoshibora1892
Bahut badhiya padhate ho sir aap 🙏
thank you so so much
you make me fall in love with dynamic programming .please do a live talk with us and give some advices for interview . thanks for the video nikhil.
glad you liked the video. Check out my latest video on Edit Distance too. Just uploaded it today :)
I will have a youtube live coming up soon.
@@nikoo28 glad to know. We like to talk with you.
the way of explaining was very very good. but we can use simple Fibonacci approach as well.
but how would you know that it is a fibonacci sequence??
Really helpfull sir
The way you're explaining is >>>>>>>>>>>>>>>>>>>>>>>>> any other course or youtube channel
It will be so helpful if you tell about my channel to your friends/colleagues as well 😃
@@nikoo28 yes sir shared with community groups
Great video, what tool are you using with your pen to make those bright red lines?
that is an application called GoodNotes 6
This problem can also be done with the help of recursion
This can be done using 2 ints as well.
```golang
func climbStairs(n int) int {
if (n == 1 || n == 2) {
return n
}
a, b := 1, 1
for i := 2; i < n; i++ {
a, b = b, b + a
}
return a + b
}
```
So, its a modified question of finonacci series problem
not exactly...it just happens to have a fibonacci pattern.
Is it bad to use recursive solutions for dynamic programming? I simply used recursion similar to fibonacci and then to make it more performant used a memo obj. That way it will avoid recursion for already encountered inputs. The tabulation approach seems lot less intuitive for more complex problems.
I won't say bad to use recursion but it is definitely less intuitive. When something goes wrong it is very hard to trace what happened, and fixing it becomes problematic. Recursive solutions look small for sure, but it is not necessary that they take less space as well.
but if the no of stairs is 1 your code will cause indexoutofboundexception. In order to avoid that you should initialize 0 index value and 1 index value to 1 and run the loop starting from i=2;
Min Cost Climbing Stairs also make vedio on these quation
let me find it
this feels exactly like Fibonacci sequence
Yes, but you need to arrive at that conclusion first
Isnt this is tabulation rather than memoization? As we following bottom up approach from base case to final result 13:37
by tabulation if you mean storing all results in a table, then yes it is the same. Memoization is just a concept to store your calculated results, you do it in any data structure you like as long as you are saving space/time.
Sir please make a series of all the 150 neet code questions using java, it's a humble request 🥺
Will upload soon
@@nikoo28 thank you ☺️
You can reduce space complexity to O(1). It's a fibonnaci series in other name👍
But you need to understand the problem before you can derive the fibonacci series
Sir please make whole series on Tree,Graph, DP plz sir
Hi, check my playlists on the channel.
Currently I am trying to add as many videos as I can…but just limited by the time I have available :)
@@nikoo2805 Thanks sir no problem
The complete playlist on graphs is now available: th-cam.com/play/PLFdAYMIVJQHNFJQt2eWA9Sx3R5eF32WPn.html
why +1 i didn't get it ? isn't it like prefix sum? so we are basically storing sum of last two ele so why we need n+1 size instead of n ?
that is just to avoid index out of bounds exception
op
so solution of this problem is basically a fibbonacci?
you are absolutely correct. Watch another fun video on fibonacci series: th-cam.com/video/WuMTCaM2pk8/w-d-xo.html
On How to understand and attack, how can (climb 1 stair from step 6 + climb 2 stairs from step 5) be translated to (number of ways to reach step 6 + number of ways to reach step 5)? HOW?
that is because you have to find the total number of ways.
if you are able to reach step 6, then with 1 more stair you will reach step 7.
so if you can reach step 6 in 10 ways, you can reach step 7 also by just climbing one more step. so all 10 ways you reached step 6 and then 1 more stair.
so you are reaching step 7 in 10 ways.
similarly, if you reach step 5 in 15 ways, then with just 2 more stairs you will reach step 7. so you can also reach step 7 in 15 ways.
total ways = number of ways to reach step 6 + number of ways to reach step 5
Thank you @@nikoo28
I understood how to implement the code and I used recursion, like this:-
public class Solution{
public int climbStairs(int n) {
return fib(n);
}
public int fib(int n){
if(n
That will have a LOT of redundant method calls, but you can keep the recursive approach if you use memoization. Look that up.
There's also videos explaining this solution with that approach.
@@brunosdm Oh! I looked up memoization and watched the explanation by hackerrank. Thanks!
absolutely correct, with memoization you can store your results..so you are not computing again and again.
Confused.
Isn't this LeetCode 70 (Climbing Stairs) and not 47 (Permutations II)?
Thanks..this has been fixed :)
11:44 n minus 1 and n minus 2 😅😅
why array size is n+1
you need to start from 0
@@nikoo28 but you are not using 0th index right
This is just a fibonacci series answer.
but you need to reach over there first :)
@@nikoo28 Love your videos sir❤
Thank you bhai...apke tasveer print karke main kal se pooja karunga
thanks for the lovely feedback 🙏
you should make a udemy course and make $$
Haha..what course do you think I should make?
@@nikoo28 Udemy course on solving leetcode and another course on DSA
sub done 🤙
this method is right or wrong @NikhilLohia
when i submit the code then I give's exceded time error
if(n == 1 || n == 2){
return n;
}
int recCall1 = climbStairs(n-1);
int recCall2 = climbStairs(n-2);
int smallCal = recCall1+recCall2;
return smallCal;
try debugging with edge cases