求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 ...