1. 程式人生 > >迅雷2018演算法工程師-程式設計題-python

迅雷2018演算法工程師-程式設計題-python

1. 用x,y表示一個整數範圍區間,現在輸入一組這樣的範圍區間(用空格隔開),請輸出這些區間的合併。

輸入描述:

一行整數,多個區間用空格隔開。區間的逗號是英文字元。

輸出描述:

合併後的區間,用過空格隔開,行末無空格

'''
1.首先按照x元素排序,把第一個區間存入res
2.從第二個開始遍歷:
如果當前區間與res[-1]無重疊,直接將當前區間append到res
如果有重疊,將res[-1]的end值更新為max(res[-1]的end值,當前區間end值)
'''
ss = input().split()
ss = [i.split(',') for i in ss]
s=[]
for i in range(len(ss)):
    s.append(list(map(int,ss[i])))
s.sort()
res = [s[0]]
for i in range(1,len(s[1:])+1):
    if s[i][0]<=res[-1][1]:
        res[-1][1] = max(s[i][1],res[-1][1])
    else:
        res.append(s[i])
res = [','.join([str(j) for j in i]) for i in res]
res = ' '.join(res)
print(res)

2. 輸入一個有符號整數,輸出該整數的反轉值,如:

輸入1:123456,輸出1:654321;

輸入2:-123456,輸出2:-654321

# 先判斷是否是負數,然後利用字串反轉。
a=input()
if a[0]=='-':
    b = '-'+a[1:][::-1]
else:
    b = a[::-1]
print(int(b))

3. 給定整數n,取若干個1到n的整數可求和等於整數m,程式設計求出所有組合的個數。比如當n=6,m=8時,有四種組合:[2,6], [3,5], [1,2,5], [1,3,4]。限定n和m小於120 

輸入描述:

整數n和m

輸出描述:

求和等於m的所有組合的個數。

輸入例子1:

6 8

輸出例子1:

4

超時,程式碼的複雜度有點高,通過率是60%。

# 遞迴,含n,與不含n
def getCount(n,m):
    if n<1 or m<1:
        return 0
    sum=0
    if m<n:
        n=m
    if m==n:
        sum=sum+1
    sum=sum+getCount(n-1,m)
    sum=sum+getCount(n-1,m-n)
    return sum

n,m=list(map(int,input().split()))
print(getCount(n,m))