|
| 1 | +#柠檬水找零 |
| 2 | +#记录5和10的个数,如果有一个透支了,就说明不能满足找零 |
| 3 | +class Solution: |
| 4 | + def lemonadeChange(self, bills: List[int]) -> bool: |
| 5 | + i=j=0 |
| 6 | + for k in bills: |
| 7 | + if k==5:i+=1 |
| 8 | + elif k==10:j+=1;i-=1 |
| 9 | + else: |
| 10 | + if j==0:i-=3 |
| 11 | + else:i-=1;j-=1 |
| 12 | + if i<0 or j<0:return False |
| 13 | + return True |
| 14 | + |
| 15 | +#买股票的最佳时机 |
| 16 | +#首先设置收益profit=0,接着从1到len(prices)进行迭代,后面的值是否比前面的值大,如果后面值减去前面值成立,则累加给profit,如果不成立那么就不管它,因为不会影响结果,最后全部迭代完return profit |
| 17 | +class Solution: |
| 18 | + def maxProfit(self, prices: List[int]) -> int: |
| 19 | + profit = 0 |
| 20 | + for i in range(1,len(prices)): |
| 21 | + if prices[i-1] < prices[i]: |
| 22 | + profit += prices[i] - prices[i-1] |
| 23 | + return profit |
| 24 | +#单词接龙 |
| 25 | +class Solution: |
| 26 | + def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int: |
| 27 | + # BFS |
| 28 | + from collections import deque, defaultdict |
| 29 | + # 先验判断 |
| 30 | + if endWord not in wordList: |
| 31 | + return 0 |
| 32 | + # 提前构建邻接表 -> 用generic state做key |
| 33 | + intermidiateWords = defaultdict(list) |
| 34 | + wordLen = len(beginWord) |
| 35 | + for word in wordList: |
| 36 | + for i in range(wordLen): |
| 37 | + intermidiateWords[word[:i] + '*' + word[i+1:]].append(word) |
| 38 | + # 建队列 加初始状态 |
| 39 | + queue = deque() |
| 40 | + memo = set() |
| 41 | + queue.append(beginWord) |
| 42 | + memo.add(beginWord) |
| 43 | + step = 1 |
| 44 | + while queue: |
| 45 | + size = len(queue) |
| 46 | + for _ in range(size): |
| 47 | + curWord = queue.popleft() |
| 48 | + for i in range(wordLen): |
| 49 | + intermidiateCurWord = curWord[:i] + '*' + curWord[i+1:] |
| 50 | + # 下一个状态的所有word |
| 51 | + for word in intermidiateWords[intermidiateCurWord]: |
| 52 | + if word == endWord: |
| 53 | + return step + 1 |
| 54 | + if word not in memo: |
| 55 | + queue.append(word) |
| 56 | + memo.add(word) |
| 57 | + step += 1 |
| 58 | + else: |
| 59 | + return 0 |
| 60 | +#岛屿数量 |
| 61 | +#把grid扩一圈,定义计数变量ret。 |
| 62 | +循环网格:如果是"1",计数变量加一,然后搜索并替换相关连的"1"和本身为"0"。 |
| 63 | +class Solution: |
| 64 | + def numIslands(self, grid: List[List[str]]) -> int: |
| 65 | + if not grid: |
| 66 | + return 0 |
| 67 | + |
| 68 | + def bfs(i: int, j: int) -> None: |
| 69 | + if i == 0 or j == 0 or i == x-1 or j == y-1 or grid[i][j] == "0": |
| 70 | + return |
| 71 | + grid[i][j] = "0" |
| 72 | + bfs(i-1, j) |
| 73 | + bfs(i, j-1) |
| 74 | + bfs(i+1, j) |
| 75 | + bfs(i, j+1) |
| 76 | + |
| 77 | + x = len(grid)+2 |
| 78 | + y = len(grid[0])+2 |
| 79 | + grid = [["0"]*x]+[["0"]+i+["0"] for i in grid]+[["0"]*x] |
| 80 | + ret = 0 |
| 81 | + for i in range(1, x-1): |
| 82 | + for j in range(1, y-1): |
| 83 | + if grid[i][j] == "1": |
| 84 | + bfs(i, j) |
| 85 | + ret += 1 |
| 86 | + return ret |
0 commit comments