题目1:二维数组的查找

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

class Solution:
# array 二维列表
def Find(self, target, array):
for i in range(len(array)):
for j in range(len(array[0])):
if array[i][j] == target:
return True
return False array = [[1,2,3],[4,5,6],[7,8,9]]
solution = Solution()
print(solution.Find(9,array))

题目2:替换空格

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

class Solution:
# s 源字符串
def replaceSpace(self, s):
s =s.replace(' ','%20')
# s = '%20'.join(s.split(' '))
return s
# write code here str = "We Are Happy."
solution = Solution()
print(solution.replaceSpace(str))

题目3:从尾到头打印链表 

题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

class ListNode:
def __init__(self, x):
self.val = x
self.next = None class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
newlist = []
while listNode:
newlist.append(listNode.val)
listNode = listNode.next
return newlist[::-1] A1 = ListNode(1)
A2 = ListNode(2)
A3 = ListNode(3)
A4 = ListNode(4)
A5 = ListNode(5) A1.next = A2
A2.next = A3
A3.next = A4
A4.next = A5 solution = Solution()
print(solution.printListFromTailToHead(A1))

题目4:重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

(前序:根-左-右 中序:左-根-右  后序:左-右-跟)

class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
# write code here
if len(pre)==0:
return None
elif len(pre)==1:
return TreeNode(pre[0])
else:
root=TreeNode(pre[0])
#根节点的索引
post = tin.index(pre[0])
root.left=self.reConstructBinaryTree(pre[1:post+1],tin[:post])
root.right=self.reConstructBinaryTree(pre[post+1:],tin[post+1:])
return root

题目5:用2个栈实现队列

class Solution:
def __init__(self):
#A为入栈,B为出栈
self.stackA=[]
self.stackB=[]
def push(self, node):
#入栈直接压入就行
self.stackA.append(node)
# write code here
def pop(self):
# return xx
#如果B不为空,先将B出栈
if self.stackB:
return self.stackB.pop()
#如果A为空,返回None
elif not self.stackA:
return None
else:
while self.stackA:
#将栈A出栈的值反压入栈B中,出栈时就说先入先出
self.stackB.append(self.stackA.pop())
return self.stackB.pop()

题目6:旋转数组的最小数字 

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

解法1:(懒)

class Solution:
def minNumberInRotateArray(self, rotateArray): if len(rotateArray)==0:
return 0
else:
return min(rotateArray)

解法2:(无脑)

class Solution:
def minNumberInRotateArray(self, rotateArray): if len(rotateArray)==0:
return 0
else:
for i in range(1,len(rotateArray)):
if rotateArray[0]>rotateArray[i]:
rotateArray[0],rotateArray[i] = rotateArray[i],rotateArray[0]
return rotateArray[0] 

题目7:斐波拉契数列

题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

解法1:递归(时间复杂度太大,可能编译不通过)

class Solution:
def Fibonacci(self, n):
if n <=0:
return 0
elif n <= 2:
return 1
return self.Fibonacci(n-1)+self.Fibonacci(n-2)

解法2:循环就完了

class Solution:
def Fibonacci(self, n):
if n ==0:
return 0
elif n == 1:
return 1
else:
big = 1
small = 0
for i in range(2,n+1):
big,small = big+small,big
return big

题目8:跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

倒着想.n级的跳法=n-1级的跳法+n-2级的跳法,实际上也是斐波拉契数列的问题

class Solution:
def jumpFloor(self, number):
if number==0:
return 0
elif number<=2:
return number
else:
f1,f2 = 1,2
for i in range(3,number+1):
f1,f2 = f2,f1+f2
return f2

题目9:变态跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

同上一题

f(n)=f(0)+f(1)+...+f(n-1)  f(n-1)=f(0)+f(1)+...+f(n-2)  第一个式子减第二个式子f(n)=2f(n-1)

class Solution:
def jumpFloor(self, number):
if number==0:
return 0
elif number<=2:
return number
else:
f1,f2 = 1,2
for i in range(3,number+1):
f1,f2 = f2,2*f2
return f2 

题目10:矩形覆盖

题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

也是斐波拉契数列的问题,第一次横着放f(n-1),竖着放(必须放2个)f(n-2)   f(n)=f(n-1)+f(n-2)

class Solution:
def rectCover(self, number):
if number==0:
return 0
elif number<=2:
return number
else:
f1,f2 = 1,2
for i in range(3,number+1):
f1,f2 = f2,f1+f2
return f2

题目11:二进制中1的个数

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

负数先与0xffffffff做与运算

    def NumberOf1(self, n):
# write code here
return bin(n&0xffffffff).count('1')  

题目12:数值的整数次方

题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

emmm   硬来

class Solution:
def Power(self, base, exponent):
if base==0:
return 0
elif base==1 or exponent==0:
return 1
elif exponent==1:
return base
else:
result = 1.0
for i in range(abs(exponent)):
result *= base
if exponent < 0 :
return 1.0/result
else:
return result
# write code here

题目13:调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

class Solution:
def reOrderArray(self, array):
if len(array) <= 1:
return array
else:
result = []
list = []
for i in range(len(array)):
if array[i]%2 != 0:
result.append(array[i])
else:
list.append(array[i])
for j in list:
result.append(j)
return result
# write code here

题目14:链表中倒数第K个节点

题目:输入一个链表,输出该链表中倒数第k个结点。

将链表转化成列表在求节点的值

class Solution:
def FindKthToTail(self, head, k):
if head == None or k <= 0:
return None
l = []
while head != None:
l.append(head)
head = head.next
if k>len(l):
return None
else:
result = l[-k]
return result
# write code here

题目15:反转链表

题目:输入一个链表,反转链表后,输出新链表的表头。

class Solution:
# 返回ListNode
def ReverseList(self, pHead):
if pHead==None or pHead.next==None:
return pHead
result=None
while pHead!=None:
temp=pHead.next
pHead.next=result
result=pHead
pHead=temp
return result
# write code here

题目16:合并2个排序的链表

题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
if pHead1==None and pHead2==None:
return None
num1=[]
num2=[]
while pHead1!=None:
num1.append(pHead1.val)
pHead1=pHead1.next
while pHead2!=None:
num2.append(pHead2.val)
pHead2=pHead2.next
num=num1+num2
num.sort()
pHead=ListNode(num[0])
pre=pHead
for i in range(1,len(num)):
node=ListNode(num[i])
pre.next=node
pre=pre.next
return pHead 

题目17:树的子结构

pass

题目18:二叉镜像树

pass

题目19:顺时针打印矩阵

<剑指offer>面试题的更多相关文章

  1. Java面试题—初级(7)

    作为一枚Java后端开发者,数据库知识必不可少,对数据库的掌握熟悉度的考察也是对这个人是否有扎实基本功的考察.特别对于初级开发者,面试可能不会去问框架相关知识,但是绝对不会不去考察数据库知识,这里收集 ...

  2. Java面试题—初级(9)

    139. Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 好处: 1.类型安全,提供编译期 ...

  3. python面试题--初级(二)

    基础不牢,地动山摇,面试的时候经常会被问到一些平时基础的很容易被忽视的知识点,所以重在积累,多看多背深入理解,才能在某一天工作中豁然开朗恍然大悟. 面试题不仅仅为了应付面试,更是知识点的一个梳理总结归 ...

  4. 面试题<初级>

    INTERVIEW .markdown-body ul pre code { background:red; font-size:40px; } @code-char:"```" ...

  5. Java面试题—初级(4)

    31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,"xyz" ...

  6. Java面试题—初级(3)

    21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...

  7. Java面试题—初级(2)

    11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...

  8. Java面试题—初级(1)

    1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...

  9. Java面试题—初级(5)

    41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系? hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hashtable.H ...

  10. Java面试题—初级(8)

    基本表结构:  student(sno,sname,sage,ssex)学生表        course(cno,cname,tno) 课程表        sc(sno,cno,score) 成绩 ...

随机推荐

  1. Java——对象

    1.2对象 1.2.1 对象的创建和使用 ①使用new + 构造器创建一个新的对象: ②使用“对象名.对象成员”的方式访问对象成员(包括属性和方法). public class Animal { pu ...

  2. 记一次为解决Python读取PDF文件的Shell操作

    目录 一.背景 二.问题 三.解决 四.一顿分析及 Shell 操作 五.后续 一.背景 本想将 PDF 文件转换为 Word 文档,然后网上搜索了一下发现有挺多转换的软件.有的是免费的.收费,咱也不 ...

  3. 【代码工具】Lombok来优雅的编码

    前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注解实现这一目的. 正文 添加依赖 在 pom.xml ...

  4. 如何打造7*24h持续交付通道?阿里高级技术专家的5点思考

    我们对于研发效能的讨论,本质上是提高整个技术生态中的协同效率.如果仅从研发角度出发,技术团队要实现的终极目标是7*24小时的灵活发布窗口,以及更快的业务迭代能力. 7*24小时发布窗口的实现其实并不简 ...

  5. js 彻底理解回调函数

    一.前奏 在谈回调函数之前,先看下下面两段代码: 不妨猜测一下代码的结果. function say (value) { alert(value); } alert(say); alert(say(' ...

  6. Api:目录

    ylbtech-Api:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech.c ...

  7. go beego

    一. 引入 go get github.com/astaxie/beego go get gitgub.com/beego/bee go get -u gitxxx.... 更新框架 编写 packa ...

  8. (转)HashMap和HashSet的区别

    HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的问题不涉及到HashSet和H ...

  9. 在Ubuntu中安装MySQL (转载)

    MySQL在Linux Ubuntu中安装 本文使用的Linux是Ubuntu 12.04.2 LTS 64bit的系统,安装MySQL数据库软件包可以通过apt-get实现. 在Linux Ubun ...

  10. POJ 3667 线段树区间合并裸题

    题意:给一个n和m,表示n个房间,m次操作,操作类型有2种,一种把求连续未租出的房间数有d个的最小的最左边的房间号,另一个操作时把从x到x+d-1的房间号收回. 建立线段树,值为1表示未租出,0为租出 ...