劍指offer 發散思維能力

2021-09-24 09:15:01 字數 2088 閱讀 9046

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)

1、解法一:python函式

# -*- coding:utf-8 -*-

class solution:

def sum_solution(self, n):

# write code here

return sum(list(range(1, n + 1)))

2、解法二:利用兩個函式,乙個函式充當遞迴函式的角色,另乙個函式處理終止遞迴的情況,如果對n連續進行兩次反運算,那麼非零的n轉換為true,0轉換為false。利用這一特性終止遞迴。

# -*- coding:utf-8 -*-

class solution:

def sum_solution(self, n):

# write code here

return self.sum(n)

def sum0(self, n):

return 0

def sum(self, n):

func =

return n + func[not not n](n - 1)

3、解法三:終止遞迴採用邏輯與的短路特性

# -*- coding:utf-8 -*-

class solution:

def sum_solution(self, n):

# write code here

return n and n + self.sum_solution(n - 1)

寫乙個函式,求兩個整數之和,要求在函式體內不得使用「+」、「-」、「×」、「÷」四則運算符號

1、解法一:python函式

# -*- coding:utf-8 -*-

class solution:

def add(self, num1, num2):

# write code here

return sum([num1, num2])

2、解法二:三步走策略:①只做各位相加不進製(可以用異或來處理,和異或結果相同);②進製:可以想象為兩個數先做位與運算,然後左移一位;③把前兩個步驟的結果相加,重複前兩步,直到不產生進製為止。在python中做位運算,需要做越界檢查。

# -*- coding:utf-8 -*-

class solution:

def add(self, num1, num2):

# write code here

while num2:

sum = (num1 ^ num2) & 0xffffffff

carry = ((num1 & num2) << 1) & 0xffffffff

num1 = sum

num2 = carry

if num1 < 0x7fffffff:

return num1

else:

return ~(num1 ^ 0xffffffff)

給定乙個陣列a[0,1,…,n-1],請構建乙個陣列b[0,1,…,n-1],其中b中的元素b[i]=a[0]a[1]…*a[i-1]a[i+1]…*a[n-1]。不能使用除法。

# -*- coding:utf-8 -*-

class solution:

def multiply(self, a):

# write code here

if not a or len(a) <= 0:

return

length = len(a)

b = [1] * length

for i in range(1, length):

b[i] = b[i - 1] * a[i - 1]

temp = 1

for i in range(length - 2, -1, -1):

temp *= a[i + 1]

b[i] *= temp

return b

劍指Offer 發散思維能力

不用加減乘除做加法 求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 看到這道題的第一反應是使用迴圈或者遞迴,但是,題目要求不能使用for while if else switch case等關鍵字及條件判斷語句。第二...

劍指offer刷題記錄 發散思維能力

求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 需要迭代計算又不讓用迴圈語句,自然想到遞迴呼叫了,但是題目又不讓用if case等判斷語句,要如何終止遞迴呢?使用 邏輯運算,如果前乙個為0的話,後面的語句將不再被呼叫...

6 5 發散思維能力

面試題47 不用加減乘除做加法 面試題48 不能被繼承的類 參考 所有offer題目的leetcode鏈結及python實現 github target offer 題目 求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c ...