“数据的存法和算法”---Leetcode coding using Python

博主分享了使用Python解决LeetCode题目的心得体会,每周更新,涵盖了数组、字符串、链表等多种数据结构和算法问题,如两数之和、最大回文串、回文数字等。通过实际编程克服学习疲劳,提升编程技能。
摘要由CSDN通过智能技术生成

每次一开始学习的时候总是很困,但是当我发现我不看论文,不看书,专注于写代码的时候,这种疲惫的感觉立马就一扫而光了,所以用leetcode来学习写python的代码就成了这学期的学习习惯,哈哈哈。会一直更新,直到我做完一遍leetcode的题目,也许会很慢,但是路漫漫其修远兮,努力就好啦,嘻嘻。加油!!!

如果有需要我会把我的全部成功python代码发上来。

2020Winter:
week1 0106-0112
1.TWO sums
给一个和,在数组里面找到,相加是这个值的两个数,然后输出数组中这两个数的index

2.LISTNode 数据结构
和正常的数字相加的顺序相反

***3.找到最大的重复的子串,且首次出现的

Week2 0113-0119
4.两个sorted array,找到median值
Merge sort

***5.最长回文串
单数回文串和双数回文串

6.Zigzag的字符串
每一串,根据行数,然后看作是一行一行的进行处理

7.Reverse integer(简单是简单,哈哈哈,可是就是有坑)
123->321 120>21 -120>-21 
不仅仅是转换之前是32位int,转换之后也要是32位int

Week3 0120-0126 Spring Festival 0124
8.字符串和数字的转换,只有两种情况可以进行转换。python正则表达式
(1)空格+数字
(2)数字
?表示出现0次或者1次 +表示出现1次以上 *表示0次或者多次
表达式
^\s*[\+\-]?\d+

9.判断是否是回文数字
python 的bool类型 True 和 False 要注意 首字母大写

10.正则表达式

******10.正则表达式 Hard
判断特殊情况的空串还是非空串,非空的话长度是1还是大于1??
非空串从后往前进行递归。主要有两种*和非*结尾的。
无论是*还是非*结尾的,里面都要对.进行判断。

https://blog.csdn.net/hk2291976/article/details/51165010
就是p就是s的一般的表达式。
s是一个特殊的例子,我们要判断这个例子是不是属于p的。
p的式子可以全涵盖s字符串,而不是涵盖子串。
所以不是一个查找子串的问题,是一个全匹配的问题。

*不会单独出现
前面必须有一个和ta同时出现的字符

.代表任意字符

递归思想
总体是从后往前推到的状态。
但使用python的正则表达式的话,那么就很简单,一句话搞定 re.compile('^'+p+'$',s)

11.(如果心情不好,不知道该学习做什么的时候就编程吧,leetcode真的是好用的学习工具啊,哈哈哈)
Container with Most water!
这个呢可以遍历查找,也可以简单的左向右,右向左查找。没有很难。

12.Integer to Roman
用一个hash from perl or dict from python store the data.
然后就不断的--进行操作,直到最后减没了

13.Roman to integer
两个字符表示的数字的特点:前一个字符的数字小于后一个字符的数字

14.Longest Common Prefix
最长的字符的前缀。
re.search()

15.3sum
tuple之后的数据可以哈希处理了,不然就是显示unhashable

tuple 可以 sort

a=[1,2,3]
a=[4,5,6]
result = []
result.append(tuple(a))
result.append(tuple(b))
sorted(result)

16.3sumClosest!!!
数据结构有所不同,虽然还是左右相加找。

17.电话号码组合
可以画成递归树的都可以递归进行组合。 递归的输出又作为递归的输入进行操作!!!!

18.4Sum
就是3sum的升级版本
两层循环
相加产生target

19.Remove Nth Node From End of List listNode 
Append list node, change one element, the others will be changed sequentially.
链表的整个链条都会发生改变?!
append的元素是链表,所以跟着的链表的结构就都变了??????
amazing。。。。
python可以有倒着的数组下标。
result[-2] 倒数第二个。

20.Valid Parentheses
前几天刚好你跟我讨论过这个东西,你说用“”空来替代对称的符号。一对一对的
但是也可以用栈的结构来进行处理。进栈出栈。

21.merge sort

关键是熟悉listnode的数据结构。。。

22.括号的生成

回溯算法,回溯到上一状态是怎么操作的呢?

https://blog.csdn.net/sinat_27908213/article/details/80599460

38. 20200610 Combination Sum

理解递归真的是非常让人头疼的事情。“分而治之”,化解为一个个的小问题。

https://www.jianshu.com/p/0e4753ac9ffb

先来看一个简单的例子,累计前n个interger整数相加的和。Assume target = 7

class Solution(object):
    def sum_n(self, target):
        def sum(n):
            if(n==1):
                return 1
            else:
                r = sum(n-1)+n
                # 到这一步的时候,n还在向最里面递归,
                # 递归到基本单元之后再方向递归操作。
                return r
        results = sum(target)
        return results

他会一直向里面不断的递归递归,一直到最基本的单元,也就是,n=1的时候, 返回1。

这时候就可以计算sum(n-1)+n了,这是他的上一步,这时候n=2,计算r = 1+2。

再返回n=2的上一步,也就是n=3,计算r=(1+2)+3=sum(2)+3=sum(sum(1)+2)+3

一直一直循环嵌套,直至最外层。

再返回这个题目,最小单元是什么呢?只有1个candidate的情况。

Input: candidates = [2,3,6,7], target = 7,
A solution set is:
[
  [7],
  [2,2,3]
]

从第一个元素开始,无数个2一直累加,直到这个数字大于或等于target,如果等于皆大欢喜,如果大于,那么就要pop出去。

算是理解了递归吧,慢慢来吧,加油加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值