今天看的是复制IP地址这道题,题目如下:给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。
这道题一开始想过四段每一段先分割字符串然后去判断分割出来的部分符合吗,然后再去找下一段但是这样我发现就没办法找出所有的可能,因为每一段只要有一个符合就找下一段了,没有考虑到这一段有多种可能,所以解决不了。后来放弃了,看了大佬的做法。这里我复制过来并加以注解以便自己看的懂。感谢原作者的代码分享,下面是链接(作者:stack_pop
链接:https://leetcode-cn.com/problems/restore-ip-addresses/solution/js-di-gui-chao-yue-96-by-stack_pop/
)
代码截图如下:
作者用的是递归的做法,对于递归我还是不太会的。学习了下,递归最重要的就是找出递归体和递归结束条件。
这里递归体是每一段都有1,2,3位这三中情况,递归结束条件是当已经分了4段并且strid不再有剩时就是结束了,就可放入res中。
这下面是我画的部分执行情况(纸张不够只能画出一部分==,字很丑请见谅)
然后这里我要用我粗涩的语言说一下何时采用递归而不用循环。(表达不好导致你看不懂的话请见谅)for循环和递归一样都可以执行同一种操作,但是当有多种情况时,比如这里每一段都可能有1位,2位或3位,递归可以返回同一阶段的下一种情况去执行而for不行,所以当每一个‘循环‘中有多种可能的情况,并且有明确的结束条件时还是用递归。当用for就可以轻松解决时就用for不要浪费资源。
好了,今天这道题的学习就到这里。