剑指offer全通关记录

JZ12 数值的整数次方

首先对负数的处理,xnx^n可以处理成1x(n)\frac{1}{x}^{(-n)}
当n为偶数时候,262^6可以处理成(23)2{(2^3)}^2,2n=(xnx)x2^n={(x^\frac{n}{x})}^x
当n为奇数时候,272^7可以处理成(23)2x(2^3)^2*x,2n=(xnx)xx2^n={(x^\frac{n}{x})}^x*x

剑指offer全通关记录

JZ15 反转链表

指针cur表示待翻转结点,pre表示待翻转结点的前一个结点,next表示待翻转结点的下一个结点。当cur不为空,不断循环cur.next=pre把当前结点下一个变成上一个结点就行了.

剑指offer全通关记录

JZ27 字符串的排列

这一题感觉直接深搜是最方便的了,值得注意的是要判断空字符串返回。而且要确保答案不能出现重复字符串,这是个坑。

剑指offer全通关记录

JZ29 最小的K个数

采用排序算法做,但是不能硬排选取最小的k个,可以选择堆排序这种较快的算法,小顶堆每一趟可以确定最大的数,我们只用排序k躺,不用全部排完。

剑指offer全通关记录

JZ30 连续子数组的最大和

这题是很典型的动态规划,作者为了便于理解还是采用了空间复杂度O(n)的解法,动态规划三部曲
确定状态数组的含义。dp[i]表示以array[i]结尾的连续子数组的最大和
状态转移方程。dp[i]={array[i]dp[i-1]<=0dp[i1]+array[i]dp[i-1]>0 dp[i]= \begin{cases} array[i]& \text{dp[i-1]<=0}\\ dp[i-1]+array[i]& \text{dp[i-1]>0} \end{cases}
边界赋初值。当i=0时候需要我们手动赋初值,以array[0]结尾的连续子数组最大和很明显是他本身.dp[0]=array[0]

剑指offer全通关记录

JZ31 整数中1出现的次数

这题比较简单,把数字每一位取出来就行了,对一个数字模10就是该数字最后一位,然后把该数字变成整除10继续

剑指offer全通关记录