1、 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
答:

class Solution:# array 二维列表def Find(self, target, array):# write code heren=len(array)flag='false'for i in range(n):if target in array[i]:flag='true';breakreturn flag
while True:try:S=Solution()# 字符串转为listL=list(eval(raw_input()))array=L[1]target=L[0]print(S.Find(target, array))except:break

len(list) 长度 二维数组就是2.
raw_input() 将所有输入作为字符串看待,返回字符串类型
注意:input() 和 raw_input() 这两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收)。而对于 input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它括起来,否则它会引发一个 SyntaxError 。
除非对 input() 有特别需要,否则一般情况下我们都是推荐使用 raw_input() 来与用户交互。
注意:python3 里 input() 默认接收到的是 str 类型。
https://www.runoob.com/python/python-func-input.html
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
https://www.runoob.com/python/python-func-eval.html

2、请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
答:

class Solution:# s 源字符串def replaceSpace(self, s):# write code heres = list(s)l=len(s)for i in range(0,l):if s[i]==' ':s[i]='%20'return ''.join(s)
if __name__=='__main__':a="we are happy "s=Solution()b=s.replaceSpace(a)print(b)

Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
https://www.runoob.com/python/att-string-join.html

3、输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

class Solution:# 返回从尾部到头部的列表值序列,例如[1,2,3]def printListFromTailToHead(self, listNode):# write code herel = []head = listNodewhile head:l.insert(0, head.val)head = head.nextreturn l

listNode表示链表第一个节点的地址
val表示节点值
next表示下一个节点

4、https://blog.csdn.net/zhhy236400/article/details/105739946
5、用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
答:
栈A用来作入队列
栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列)

class Solution:def __init__(self):self.stack1=[]self.stack2=[]def push(self, node):# write code hereself.stack1.append(node)def pop(self):# return xxif self.stack2==[]:while self.stack1:self.stack2.append(self.stack1.pop())return self.stack2.pop()

6、把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
答:笨方法,逐个比较,当前元素大于下一个元素时,表明下一个元素是最小元素。

class Solution:def minNumberInRotateArray(self, rotateArray):# write code hereif len(rotateArray) == 0:return 0if len(rotateArray) == 1:return rotateArray[0]for i in range(len(rotateArray)-1):if rotateArray[i] > rotateArray[i+1]:res = rotateArray[i+1]breakreturn res

7、大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
答:递归调用开销大,复杂度高。
使用列表保存每个元素:

import time
class Solution:def Fibonacci(self, n):# write code heres = [0,1]if n < 2:return s[n]for i in range(2,n+1):a = s[i-1] + s[i-2]s.append(a)return s[n]
if __name__ == '__main__':s=Solution()a=time.time()print(s.Fibonacci(35))b=time.time()print(b-a)

耗时可以忽略不计。
8、一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
答:比较倾向于找规律的解法,f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5, 可以总结出f(n) = f(n-1) + f(n-2)的规律,但是为什么会出现这样的规律呢?假设现在6个台阶,我们可以从第5跳一步到6,这样的话有多少种方案跳到5就有多少种方案跳到6,另外我们也可以从4跳两步跳到6,跳到4有多少种方案的话,就有多少种方案跳到6,其他的不能从3跳到6什么的啦,所以最后就是f(6) = f(5) + f(4);这样子也很好理解变态跳台阶的问题了。
本质是斐波那契数列:

class Solution:def jumpFloor(self, number):# write code heres=[0,1,2]if number<=2:return s[number]else:for i in range(3,number+1):a=s[i-1]+s[i-2]s.append(a)return s[number]
if __name__ == '__main__':s=Solution()res=s.jumpFloor(10)print(res)
更简洁的做法:
class Solution:def jumpFloor(self, number):# write code herea = 1b = 1for i in range(number):a,b = b,a+breturn a

n=1时,a=1,b=2
n=2时,a=2,b=3
n=3时,a=3,b=5
所以,a的值就是斐波那契数列。
9、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
答:
f(1) = 1
f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。
f(3) = f(3-1) + f(3-2) + f(3-3)
。。。
f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(n-(n-1)) + f(n-n)
f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1) = f(n-1) + f(n-1)
所以:

class Solution:def jumpFloorII(self, number):# write code hereif number <= 0:return 0else:return pow(2,number-1)

或者:

class Solution:def jumpFloorII(self, number):# write code hereif number <= 0:return 0if number==1:return 1else:return 2*self.jumpFloorII(number-1)

10、我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
答:本质是斐波那契数列,只用考虑把最后一块矩形是如何放置的。

f(n) = f(n-1) + f(n-2)
class Solution:def rectCover(self, number):# write code heres=[0,1,2]if number <=2:return s[number]for i in range(3,number+1):a=s[i-1]+s[i-2]s.append(a)return s[number]

11、输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
答:补码看不懂。

class Solution:def NumberOf1(self, n):# write code herereturn sum([(n>>i & 1) for i in range(0,32)])

另给定整数的二进制右移操作,移位后和1的二进制作与运算,1相当于哨位,用来检测每一位是0还是1.
为什么range(0,32),这里没看懂。
也可以改成:将1左移操作,但是要除以(1<<i),因为左移会将1变大。

return sum([(n&1<<i)/(1<<i) for i in range(0,32)])

12、输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
答:
遍历两次 第一次取出奇数,第二次偶数。

class Solution:def reOrderArray(self, array):# write code herenew=[]for i in array:if i%2==1:new.append(i)for i in array:if i%2==0:new.append(i)return new

13、输入一个链表,输出该链表中倒数第k个结点。
答:用一个列表存储链表的值。

class ListNode:def __init__(self, x):self.val = xself.next = Noneclass Solution:def FindKthToTail(self, head, k):# write code herel=[]while head!=None:l.append(head)head=head.nextif k>len(l) or k<1:returnreturn l[-k]

快慢指针:快指针和慢指针相差K个节点,快指针移动到末尾时,慢指针就是倒数第K个节点。

class Solution:def FindKthToTail(self, head, k):# write code hereslow,fast=head,headfor i in range(k):if not fast:return Nonefast=fast.nextwhile fast:slow=slow.nextfast=fast.nextreturn slow

14、输入一个链表,反转链表后,输出新链表的表头。
答:

class Solution:# 返回ListNodedef ReverseList(self, pHead):# write code hereif not pHead or not pHead.next:return pHeadpre = Nonewhile pHead:nex=pHead.nextpHead.next=prepre=pHeadpHead=nexreturn pre

输入[1,2,3,4,5],输出[5,4,3,2,1]
https://blog.csdn.net/dhRainer/article/details/83411645
15、输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
答:

class Solution:# 返回合并后列表def Merge(self, pHead1, pHead2):# write code hereres = head = ListNode(42) #42这个值可以随便取while pHead1 and pHead2:if pHead1.val < pHead2.val:head.next = pHead1pHead1 = pHead1.nextelse:head.next = pHead2pHead2 = pHead2.nexthead = head.nexthead.next = pHead1 or pHead2return res.next #因为这里有next

16、操作给定的二叉树,将其变换为源二叉树的镜像。
答:

class Solution:# 返回镜像树的根节点def Mirror(self, root):# write code hereif root!= None:root.left,root.right = root.right,root.leftself.Mirror(root.left)self.Mirror(root.right)

以上为剑指offer部分题目,代码从牛客网评论区摘抄。

剑指offer部分题目及答案 python完成相关推荐

  1. 剑指offer有python版吗_剑指Offer算法类题目[Python版]

    标签:重复   作用   coding   面试   medium   mba   none   fas   utf-8 面试题012 数值的整数次方 解题思路1 考虑所有情况,循环连乘 代码: de ...

  2. 剑指offer 矩阵中的路径 @python

    剑指offer 矩阵中的路径 @python 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向 ...

  3. 销量过亿的《剑指0ffer》题目和答案电子书 (附下载)

    如果有人问面试前该看哪些题,有什么书籍可以推荐,那么<剑指offer>一定必读不可,这本书书豆瓣评分高达 9.0 ,非常适合集中时间阅读.电子书下载 1.扫码关注「顶级架构师」订阅号 2. ...

  4. 《剑指offer》面试题的Python实现

    所属网站分类: 面试经典 > python 作者:gg 链接: http://www.pythonheidong.com/blog/article/464/ 来源:python黑洞网 www.p ...

  5. 《剑指offer》题目说明

    剑指offer推荐刷题地址: Leetcode: https://leetcode-cn.com/problemset/lcof (官方授权) 牛客网:https://www.nowcoder.com ...

  6. 《剑指 Offer》题目汇总

    文章目录 1. 数组 2. 链表 3. 栈和队列 4. 哈希表 5. 字符串 6. 树 7. 堆 8. 回溯和深度优先搜索 9. 递归和循环 10. 双指针 11. 动态规划 12. 贪心算法 13. ...

  7. 《剑指Offer》题目:树的子结构

    题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否 ...

  8. 【剑指offer】题目二

    //实现一个函数:把字符串中的每个空格替换成"%20".例如输入"We are happy."则输出"We%20are%20happy." ...

  9. 《剑指Offer》题目:合并两个排序的链表

    题目描述:输入两个单调递增的链表list1,list2,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析: 1.对于链表题目,首先考虑边界情况,即链表为空的情况,提升代码 ...

  10. 剑指offer的题目

    1. 变态跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析 跳一个n阶台阶的方法数: 先跳一级,剩下的n-1级有f ...

最新文章

  1. 汇编语言ac和c何时为1,汇编语言课堂练习一(参考答案)
  2. 【转】Android studio安装与配置
  3. new ArrayList 报错
  4. 【开通指南】 实时计算 Flink 全托管版本
  5. 关于table的那些用法(一)
  6. python中引号_Python中单引号,双引号和三引号的区别
  7. (71)Verilog HDL时间度量系统函数:$time
  8. Vue的基本环境搭建
  9. python连接sql server
  10. 矩池云上安装及使用Milvus教程
  11. Separate texture from black background
  12. mysql查看和修改密码策略
  13. the permanent HWaddr of eth0 .. is still in use by bond0
  14. 计算机模拟水循环的过程,袋装水模拟做科学小实验水循环(步骤图解)
  15. python 字符串转字典的几种方法
  16. jdk1.8 在綫英文+有道翻譯版
  17. 运维快速入门必备的 Linux 服务器安全简明指南,速收!
  18. 观察者模式与推拉模型
  19. 可编程计算器(phoc)的设计与实现
  20. 内地人去香港旅游注意事项

热门文章

  1. html 图片比例 js,JavaScript,等比例缩放图片的函数
  2. 【转载】NP完全问题——最小曼哈顿网络
  3. 74HC163与74HC161 同步和异步计数器仿真示例
  4. 红黑树插入修正和删除修正详解
  5. 机器人 瓷砖墙面清洗_墙壁清洁机器人
  6. Butterfly美化
  7. 基于MAC地址划分VLAN
  8. mysql 索引 insert_Mysql 大批量数据insert or update与UQ索引
  9. web——216中安全色
  10. 荣耀笔记本系统linux与Windows,荣耀笔记本Win10正式版iso镜像下载与安装