[学习报告] LeetCode零基础指南 第一讲 函数

知识梳理

刷题步骤

  1. 阅读题目
  2. 参考示例
  3. 思考数据范围
  4. 根据题意, 实现函数的功能
  5. 本地数据测试
  6. 提交
  7. 过啦!

函数

函数是将一个经常实用的功能, 封装为一个简单的调用方法, 从而达到高效的代码复用的方法.
函数具有 高效性易用性, 因此我们在写程序时应当尽量使用许多小的函数进行编写.

函数的基本结构

返回类型 函数名(参数列表)
{
	函数体
	return 返回值;
}

函数的基本结构如上文所示, 不同的语言在实现的时候有不同的语法逻辑, 但是核心结构都是相同的.

条件运算符

我们可以使用条件运算符实现简单的if else结构的语句:

x = (a>b) ? a : b

此语句的意思为如果a>b, 则x=a, 否则, x=b.

解题报告

371. 两整数之和

在这里插入图片描述

class Solution:

	def getSum(self, a: int, b: int) -> int:

		return a+b

虽然两整数之和要求不准使用加号, 但我用了加号它能分辨出来吗, 其实也并不能.

面试题 17.01. 不用加号的加法

在这里插入图片描述

和上面两整数之和一模一样的代码, 一解双题.

剑指 Offer 65. 不用加减乘除做加法

在这里插入图片描述

又是一样, 哈哈哈哈, 一解多题.

面试题 08.05. 递归乘法

递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。

两整数之和

其实这一题也可以直接使用乘法偷偷解决, 但是人要学会成长, 我们之前已经学会了这种核心精神, 这套题我就决定规规矩矩地写一个递归乘法.

class Solution:

	def multiply(self, A: int, B: int) -> int:

		 res = 0

		 (small, big) = (A, B) if (A<B) else (B, A)

		 for i in range(small):

			 res += big

		 return res

最基本的思想就是通过循环的方式, 通过循环A次, 每一次都在结果res上加上B即可. 不过在实现细节上也有很多需要注意的地方.

比如第一次我就错啦, 因为有一组极端案例为[1231245523, 1], 如果在计算前不先判断一下大小, 使用小的数作为循环的次数, 就会浪费大量的时间. 所以我在这之前先通过条件运算符进行了大小的判断.

这里需要注意, Python中我写的

(small, big) = (A, B) if (A<B) else (B, A)

其实就相当于英雄哥在本讲中写到的C中的条件运算符

(small, big) = (A, B) ? (A<B) : (B, A)

虽然Python的更加好懂一点, 我本人还是觉得C比较帅一些==

29. 两数相除

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

在这里插入图片描述
这道题其实正经解起来还是需要像前面一样, 进行循环然后每一次循环里面在结果中减掉被除数. 并且为了不超时使用二分法优化时间复杂度优化到O(logN)的程度.

不过这道题我还是直接使用了除号, 希望之后自己能更好地掌握二分查找的解法~

class Solution:

	def divide(self, dividend: int, divisor: int) -> int:

		res = dividend // divisor

		if res < 0 and dividend%divisor != 0:

			res += 1

		if res > 2147483647 or res < - 2147483648 :

			return 2147483647

		return res

就算是直接耍赖也要多注意一点, 首先题目中给的异号的除法规则是向上取整, 而系统自己的除法是向下取整, 因此要特别判断一下.

除此之外, 题目中给出的数值范围也要注意, 我们需要添加溢出的判断.

2119. 反转两次的数字

反转 一个整数意味着倒置它的所有位。
	例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。
	
给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false 。

在这里插入图片描述

最后一题是一个判断并返回布尔值的题目, 所以我们只要能够理解它什么时候返回True, 什么时候返回False, 就能秒做此题.

观察题目, 其实就是进行两次的数字反转看结果与开始是否还是相同. 那么什么情况会不相同呢, 当然就是最后的位数有0的情况, 因此我们只需要在最后一位数是0, 也就是对10取余为0的情况下返回False即可, 这个时候要注意当数字是0本身的时候是特殊情况. 最后我们得到一行就能解决问题的代码.

class Solution:

	def isSameAfterReversals(self, num: int) -> bool:

		return num%10!=0 or num==0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值