1.分数转小数
def fractionToDecimal(a,b):
ans = "-" if a *b < 0 else ""
a = abs(a)
b = abs(b)
ans += str(a / b)
a = (a % b) * 10
if a == 0:
return ans
if a % b:
ans += "."
d = {}
res = []
while True:
r = a % b
v = a / b
if a in d:
idx = d[a]
return ans + "".join(res[:idx]) + "(" + "".join(res[idx:]) + ")"
res.append(str(v))
if v == 0:
d[a] = len(res) - 1
a *= 10
continue
d[a] = len(res) - 1
a = r * 10
if r == 0:
return ans + "".join(res)
return ans + "".join(res)
print(fractionToDecimal(1,3))
2.数组全排列
思路:
def perm(list_,stack):
if not list_:
print(stack)
else:
for i in range(len(list_)):
stack.append(list_[i])
del(list_[i])
perm(list_,stack)
list_.insert(i,stack.pop())
list_a = [1,2,3,4]
stack = []
perm(list_a,stack)
3.题目描述:给定一个经过一次旋转的有序数组,从中查找一个值,若存在返回它的索引,不存在返回-1
思路:每次先找出有序的那一半数组,再进行分情况分情况讨论。
def searchRotate(arr,target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (high + low) / 2
if arr[mid] == target:
return mid
if arr[mid] >= arr[low]:
if target >= arr[low] and target < arr[mid]:
high = mid - 1
else:
low = mid + 1
else:
if target > arr[mid] and target <= arr[high]:
low = mid + 1
else:
high = mid - 1
return -1
arr = [7,8,9,10,1,2,3,4]
target = 9
print(searchRotate(arr,target))