46-50题

作者: yy辰 | 来源:发表于2018-10-15 10:52 被阅读25次

46、字符流中第一个不重复的字符
用字典计数,然后遍历列表,得到第一个value为1的字符

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.temp = []
    # 返回对应char
    def FirstAppearingOnce(self):
        # write code here
        dic = {}
        for i in self.temp:
            dic[i] = dic.get(i, 0) + 1
        for i in self.temp:
            if dic[i] == 1:
                return i
        else:
            return '#'
            
    def Insert(self, char):
        # write code here
        self.temp.append(char)

47、替换空格
可以直接用re模块写,或者先用空格split再用'%20'join

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        temp = s.split(' ')
        return '%20'.join(temp)

48、矩阵中的路径
题目看着挺难的,但是只要不停判断下一个字符是否在上一个字符的上下左右四个地方就可以了,因此可以用递归实现。还要注意的是一个字符只能出现一次。只需要把走过的路径上的字符改成一个其它的字符就可以了。

class Solution:
    def hasPath(self, matrix, rows, cols, path):
        # write code here
        for i in range(rows):
            for j in range(cols):
                if matrix[i*cols + j] == path[0]:
                    if self.find_path(list(matrix), rows, \
                                      cols, path[1:], i, j):
                        return True

    def find_path(self, matrix, rows, cols, path, i, j):
        if not path:
            return True
        matrix[i*cols + j] = 0
        if j+1 < cols and matrix[i*cols+j+1] == path[0]:
            return self.find_path(matrix, rows, cols, path[1:], i, j+1)
        elif j-1 >= 0 and matrix[i*cols+j-1] == path[0]:
            return self.find_path(matrix, rows, cols, path[1:], i, j-1)
        elif i+1 < rows and matrix[(i+1)*cols+j] == path[0]:
            return self.find_path(matrix, rows, cols, path[1:], i+1, j)
        elif i-1 >= 0 and matrix[(i-1)*cols+j] == path[0]:
            return self.find_path(matrix, rows, cols, path[1:], i-1, j)
        else:
            return False

49、机器人的运动范围
可以用广度遍历二叉树的思路。将走过的格子存入队列,然后不断的pop和append。要注意的一点是不能走重复的格子。
代码有点长,而且用了个列表保存走过的格子。

# -*- coding:utf-8 -*-
class Solution:
    def movingCount(self, threshold, rows, cols):
        # write code here
        def istruepos(pos, threshold, rows, cols):
            if 0<=pos[0]<=rows and 0<=pos[1]<=cols:
                temp = sum([int(x) for x in str(pos[0])]) + sum([int(x) for x in str(pos[1])])
                if temp<=threshold:
                    return True
            return False
        if rows==0 or cols==0 or threshold<0:
            return 0
        queue = [[0, 0]]
        memory = [[0, 0]]
        rst = 1
        while queue:
            i = queue.pop(0)
            if istruepos([i[0], i[1]+1], threshold, rows-1, cols-1) and [i[0], i[1]+1] not in memory:
                queue.append([i[0], i[1]+1])
                memory.append([i[0], i[1]+1])
                rst += 1
            if istruepos([i[0], i[1]-1], threshold, rows-1, cols-1) and [i[0], i[1]-1] not in memory:
                queue.append([i[0], i[1]-1])
                memory.append([i[0], i[1]-1])
                rst += 1
            if istruepos([i[0]+1, i[1]], threshold, rows-1, cols-1) and [i[0]+1, i[1]] not in memory:
                queue.append([i[0]+1, i[1]])
                memory.append([i[0]+1, i[1]])
                rst += 1
            if istruepos([i[0]-1, i[1]], threshold, rows-1, cols-1) and [i[0]-1, i[1]] not in memory:
                queue.append([i[0]-1, i[1]])
                memory.append([i[0]-1, i[1]])
                rst += 1
        return rst

50、求1+2+3+...+n
由于不能用条件判断和乘除法,只能想到递归

# -*- coding:utf-8 -*-
class Solution:
    def Sum_Solution(self, n):
        # write code here
        if n == 1: 
            return 1
        return n+self.Sum_Solution(n-1)

相关文章

  • 完结篇!MySQL经典50题-第46到50题

    MySQL50-12-第46-50题 本文中介绍的是第46-50题,主要的知识点:各种时间和日期函数的使用 yea...

  • 46-50题

    46、字符流中第一个不重复的字符用字典计数,然后遍历列表,得到第一个value为1的字符 47、替换空格可以直接用...

  • 46-50

  • 46-50

    46 其它花儿都逃走了,梅花留了下来,与我共享这纯洁的世界。 47 星辰在黎明里暗自入睡,到了夜晚也不见它苏醒。 ...

  • 46-50

    润叶和向前的故事,透出了人性的光辉。什么是执念?如何才能放下执念。幸福有时候就是在巨大的灾难面前才能真正的突显出来。

  • 46-50/100

    46/100《巴比伦富翁》 跟《好好赚钱》所要讲述的原则是一样的,先支付给未来的自己(10/50储蓄)+梳理资金池...

  • 诗篇46-50

    诗篇 第46篇 〔可拉后裔的诗歌,交与伶长。调用女音。〕 上帝是我们的避难所,是我们的力量,是我们在患难中随时的帮...

  • 案例46-50

    案例46 我最近周末回家,有时会看到妈妈接电话时刻意避开我。我很敏感,就趁妈妈早上出去买菜时,偷看了她的手机,发现...

  • 第四天

    Day 4 2018/04/15 创世记 46-50 出埃及 1-10 读完,感谢主! 金句:创世记 50:1...

  • 亲人的拦阻

    20181014-亲人的拦阻 【12:46-50】耶稣还对众人说话的时候、不料、他母亲和他弟兄站在外边、要与他说话...

网友评论

      本文标题:46-50题

      本文链接:https://www.haomeiwen.com/subject/nzbxzftx.html