6 5 發散思維能力

2021-09-23 22:23:17 字數 1772 閱讀 7465

面試題47:不用加減乘除做加法

面試題48:不能被繼承的類

參考:所有offer題目的leetcode鏈結及python實現

github target offer

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

遞迴呼叫函式;

定義 func 字典,儲存函式名稱。

class

solution

:def

sum_solution

(self, n)

:return self.sumn(n)

defsum0

(self, n)

:return

0# 利用非0值作兩次非運算返回false, 0作兩次非運算返回true

defsumn

(self, n)

:# 儲存函式名稱

fun =

# 此處的fun[not not n] 不能寫作func[not not n-1], 否則測試用例為0的話, 就會無限次迭代

return n + fun[

notnot n]

(n -1)

defsum_solution2

(self, n)

:return n and self.sum_solution2(n -1)

+ n

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

只能使用二進位制的位運算;

相加即異或運算,01=

1,10

=1,0

0=0,

11=0

0^1=1, 1^0=1, 0^0=0, 1^1=0

01=1,1

0=1,

00=0

,11=

0,可以看出在1+1時未得到正確的結果;

對於1+1可以看成是,兩個二進位制相**「與」**之後,左移一位。只有兩個數都是1的時候,位與得到的結果是1,其餘都是0。

將1、2得到的結果相加,直到不產生進製為止(即2步的結果是全零)。

# 每次對num1進行與操作保證是乙個32位的整形

num1 = temp &

0xffffffff

# 判斷符號位是否為1做處理

if num1 >>

31==

0else num1 -

4294967296

完整**:

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

class

solution

:def

add(self, num1, num2):if

not num1:

return num2

ifnot num2:

return num1

while num2 !=0:

temp = num1 ^ num2

num2 =

(num1&num2)

<<

1# 每次對num1進行與操作保證是乙個32位的整形

num1 = temp &

0xffffffff

# 判斷符號位是否為1做處理

return num1 if num1 >>

31==

0else num1 -

4294967296

題目:用c++設計乙個不能被繼承的類。

略。

劍指offer 發散思維能力

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

劍指Offer 發散思維能力

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

64 求1 2 3 n(發散思維能力 )

題目描述 求1 2 3 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 解題思路 1 利用 的短路特性 2 利用sizeof特性,使用公式n n 1 2 3 利用建構函式求解 先定義乙個型別,然後建立n個該型別的例項,那麼這個型別...