仅有代码和题目,题干及要求见《剑指offer》原题~~
以下仅包含解题思路和原代码
1、把字符串转换成整数:
# -*- coding:utf-8 -*-
'''
函数功能:输入字符串转整数,不能使用str()和int()函数
'saaf12425' 返回0
'' 返回0
'124' 返回124
'+123' 返回123
'-321' 返回-321
'''
class Solution:
def StrToInt(self, s):
# write code here
if s == '':
return 0
elif s[0] == '+':
s = s[1:]
s = s[::-1]
num = 0
for i,v in enumerate(s):
temp = (ord(v)-ord('0'))*(10**i)
num += temp
elif s[0] == '-':
s = s[1:]
s = s[::-1]
num = 0
for i,v in enumerate(s):
temp = (ord(v)-ord('0'))*(10**i)
num += temp
num = -num
elif s.isdigit():
s = s[::-1]
num = 0
for i,v in enumerate(s):
temp = (ord(v)-ord('0'))*(10**i)
num += temp
else:
return 0
return num
if __name__ == '__main__':
s = Solution()
st1 = '21546'
st2 = 'selsf21435'
st3 = '+124356'
st4 = '-123'
st5 = ''
print(s.StrToInt(st1))
print(s.StrToInt(st2))
print(s.StrToInt(st3))
print(s.StrToInt(st4))
print(s.StrToInt(st5))
2、变态跳台阶:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number <= 0:
return 0
elif number == 1:
return 1
first = 1
for i in range(1,number):
result = first * 2
first = result
return result
if __name__ == '__main__':
s = Solution()
print(s.jumpFloorII(5))
3、不用加减乘除实现加法:
# -*- coding:utf-8 -*-
class Solution:
def Add(self, num1, num2):
# write code here
li = []
li.append(num1)
li.append(num2)
result = sum(li)
return result
if __name__ == '__main__':
s = Solution()
print(s.Add(2,3))
4、丑数:
# -*- coding:utf-8 -*-
'''
使用遍历法求第k个丑数,从1开始遍历,如果是丑数则count+,直到count=k为止
Step1.如果一个数能够被2整除,那么让他继续除以2;
Step2.如果一个数能够被3整除,那么让他继续除以3;
Step3.如果一个数能够被5整除,那么让他继续除以5;
Step4.如果最后这个数变为1,那么这个数就是丑数,否则不是。
'''
class Solution:
def GetUglyNumber_Solution(self, index):
# write code here
count = 1
while count < index:
if count % 2 == 0:
count = count // 2
i = count % 2
if i == 1:
count += 1
if count % 3 == 0:
count = count // 3
i = count % 3
if i == 1:
count += 1
if count % 5 == 0:
count += 1
if count % 5 == 1:
count += 1
return count
if __name__ == '__main__':
s = Solution()
print(s.GetUglyNumber_Solution(11))
5、从上往下打印二叉树:
# -*- coding:utf-8 -*-
# 二叉树的层序遍历
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回从上到下每个节点值列表,例:[1,2,3]
def PrintFromTopToBottom(self, root):
# write code here
list1 = []
if not root:
return []
queue = [root]
while len(queue):
node = queue.pop(0)
list1.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return list1
6、从尾到头打印链表元素:
# 无敌高深递归的使用
class Node:
def __init__(self,x):
self.val = x
self.next = None
class Solution:
def printListFromTailToHead(self,Node):
if Node is None:
return []
return self.printListFromTailToHead(Node.next)+[Node.val]
if __name__ == '__main__':
s = Solution()
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node1.next = node2
node2.next = node3
node3.next = None
print(s.printListFromTailToHead(node1))
# print(s.printListFromTailToHead(node2))
# print(s.printListFromTailToHead(node3))
# 使用while判断结点数据,利用insert插入list的0位置达到逆序的效果
class Node:
def __init__(self,x):
self.val = x
self.next = None
class Solution:
def printListFromTailToHead(self,Node):
list1 = []
while Node:
lis