算法练习

2020-01-14  本文已影响0人  Chris_Cui

将字符串转化为数字,实现int()方法

s = '298476'
n = 298476
s = s[::-1]
number = 0
for i, e in enumerate(s):
    print(i, e)
    for j in range(0, 10):
        if e == str(j):
            number += j*(10**i)
print(number)

回文数

def isPalindrome(x):
    if x < 0:#当数字是负数的时候必然不是回文数
        return False
    result = 0
    temp = x
    while temp != 0:
        result = result * 10 + temp % 10
        temp = temp // 10
        print(result, temp)
    return x == result

res = isPalindrome(1221)
print(res)

俩数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素

arr=[1,3,6,15]
target=9
# 一遍哈希表
def two_sum_with_dict2(nums, target):
    _dict = {}
    for i, e in enumerate(nums):
        if _dict.get(target - e) is not None:
            return (_dict.get(target - e), i)
        _dict[e] = i

res=two_sum_with_dict2(arr,target)
print(res)

# 暴力循环
def twoSum(nums,target):
    for i, m in enumerate(nums):
        j=i+1
        while j<len(nums):
            if target == m+nums[j]:
                return [i,j]
            else:
                j+=1

res = twoSum(arr,target)
print(res)

反转字符串

eStr=["h","e","l","l","o"]
outputStr=["o","l","l","e","h"]
eStr.reverse()
# 双向指针
i, j = 0, len(eStr)-1
while i<j:
    eStr[i], eStr[j]=eStr[j],eStr[i]
    i+=1
    j-=1

反转字符串里的单词

rStr = "the sky is blue"
# 方法一
newrStr = rStr.split()
i, j = 0, len(newrStr)-1
while i < j:
    newrStr[i], newrStr[j] = newrStr[j], newrStr[i]
    i+=1
    j-=1
print(' '.join(newrStr))
# 方法二
print(' '.join(rStr.split()[::-1]))

冒泡排序

def bubbo_sort(arr):
    length = len(arr)
    for i in range(length):
        for j in range(length-i-1):
            if arr[j] > arr[j+1]:
                # tmp = arr[j]
                # arr[j]=arr[j+1]
                # arr[j+1]=tmp
                arr[j], arr[j+1] = arr[j+1], arr[j]

arr=[1,3,4,5,6,8,2,7]
bubbo_sort(arr)
print(arr)
上一篇 下一篇

猜你喜欢

热点阅读