Python学习日志2021-01-25

整数反转

给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。

反转字符串

采用[::-1]对字符串进行转置,[::-2]表示从len(str)-1到0,步长为2,例如python的反转结果为nhy。

Python位运算符

  • (a & b) 按位与运算符
  • (a | b) 按位或运算符
  • (a ^ b) 按位异或运算符
  • (~a) 按位取反运算符
  • a<<2 左移动运算符
  • a>>2 右移动运算符

Python赋值运算符

  • *= 乘法赋值运算符
  • /= 除法赋值运算符
  • %= 取模赋值运算符
  • **= 幂复制运算符
  • //= 取整除赋值运算符

矩阵转置

一行代码

class Solution:
    def transpose(self, A: List[List[int]]) -> List[List[int]]:
        return [[A[i][j] for i in range(len(A))] for j in range(len(A[0]))]

调用内置函数zip()

内置函数zip()用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。 利用 * 号操作符,可以将元组解压为列表。

class Solution:
    def transpose(self, A: List[List[int]]) -> List[List[int]]:
    	return list(zip(*A))

存在重复元素II

哈希表

散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在记忆体储存位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        hash={}
        for i in range(len(nums)):
            if(nums[i] not in hash):
                hash[nums[i]]=i
            else:
                if(i-hash[nums[i]]<=k):
                    return True
                else:
                    hash[nums[i]]=i
        return False

种花问题

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。

跳格子解法

遇到当前格子已种花,则跳过下一格子,即令指数增加2。

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        i=0
        while i<len(flowerbed) and n>0:
            if flowerbed[i]==1:
                i += 2
            else:
                if i == len(flowerbed)-1:
                    n -= 1
                    i += 2
                else:
                    if flowerbed[i+1]==1:
                        i += 3
                    else:
                        n -= 1
                        i += 2
        return n==0 

旋转矩阵

先进行纵向的上下翻转,再按照对角线翻转

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        length = len(matrix)
        # 先在纵向上进行上下翻转
        # 切片会创建新的对象进而开辟新地址
        matrix[:] = matrix[::-1]
        # 然后沿对角线翻转
        for i in range(length):
            for j in range(i):
                matrix[j][i], matrix[i][j] = matrix[i][j], matrix[j][i]

字符串轮转

字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。
解题思路:如果s2s是由s1轮转而成,则将s2解在自己后面,s1一定在这个新的字符串中。

class Solution:
    def isFlipedString(self, s1: str, s2: str) -> bool:
        return len(s1) == len(s2) and s1 in s2*2

返回倒数第k个节点

实现一种算法,找出单向链表中倒数第k个节点,返回该节点的值。

双指针解法

设置两个指针,令第一个指针先走k步,然后第二个指针开始走,当第一个指针为空时,第二个指针到达倒数第k个数。

class Solution:
    def kthToLast(self, head: ListNode, k: int) -> int:
        a=head
        b=head
        for i in range(k):
            b=b.next
        while b:
            a=a.next
            b=b.next
        return a.val
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值