leetcode一些有意思的题目(持续更新)

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))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值