剣はoffer60を指します
タイトルの説明:
地面にn個のサイコロを投げ、すべてのサイコロの上側のポイントの合計はsです。nを入力して、sのすべての可能な値の確率を出力します。
答えを返すには、浮動小数点数の配列を使用する必要があります。ここで、i番目の要素は、n個のサイコロで投げることができる点のセットの中でi番目に小さい確率を表します。
例:
回答:
class Solution:
def dicesProbability(self, n: int) -> List[float]:
dp = [ [0 for _ in range(6*n+1)] for _ in range(n+1)]
for i in range(1,7):
dp[1][i] = 1
for i in range(2,n+1):
for j in range(i,i*6+1):
for k in range(1,7):
if j >= k+1:
dp[i][j] +=dp[i-1][j-k]
res = []
for i in range(n,n*6+1):
res.append(dp[n][i]*1.0/6**n)
return res
剣はoffer61を指します
トピックの説明:
トランプからランダムに5枚のカードを引いて、それがストレートかどうか、つまり5枚のカードが連続しているかどうかを判断します。2〜10は数字そのもの、Aは1、Jは11、Qは12、Kは13、大小の王は0であり、任意の数と見なすことができます。Aは14と見なすことはできません。
例:
回答:
class Solution:
def isStraight(self, nums: List[int]) -> bool:
nums.sort()
numZeros=nums.count(0)
if len(set(nums[numZeros:]))<len(nums[numZeros:]):
return False
return nums[-1]-nums[numZeros]<=4
剣はoffer62を指します
タイトルの説明:
0,1、···、n-1これらのn個の数字は0から始まり、円の中に配置され、m番目の数字が円から削除されるたびに(削除後、カウントは次から始まります)数)。円に残っている最後の番号を見つけます。
たとえば、0、1、2、3、4の5つの数字は円を形成します。0から3番目の数字を削除するたびに、削除される最初の4つの数字は2、0、4、1になります。最後に残りの数は3です。
例:
回答:
class Solution:
def lastRemaining(self, n: int, m: int) -> int:
if n<1 or m<0:
return -1
last=0
for i in range(2,n+1):
last=(last+m)%i
return last
剣はoffer65を指します
トピックの説明:
2つの整数の合計を求める関数を記述します。4つの算術記号「+」、「-」、「*」、および「/」は、関数本体で使用しないでください。
例:
回答:
class Solution:
def add(self, a: int, b: int) -> int:
while b:
result = (a ^ b) & 0xffffffff
carry = ((a & b) << 1) & 0xffffffff
a = result
b = carry
if a <= 0x7fffffff:
result = a
else:
result = -((a - 1) ^ 0xffffffff)
return result
剣はoffer67を指します
タイトルの説明:
文字列を整数に変換する関数StrToIntを記述します。atoiなどのライブラリ関数は使用できません。
まず、関数は、最初の非スペース文字が見つかるまで、必要に応じて不要な開始スペース文字を破棄します。
最初に見つかった空でない文字が正または負の記号の場合、この記号を整数の記号と同じ数の連続する数字と組み合わせます。最初の空でない文字が数値の場合は、次のように直接結合されます。整数を形成する次の連続した数字。
文字列の有効な整数部分に加えて、余分な文字が存在する場合もあります。これらの文字は無視できます。関数に影響を与えることはありません。
注:文字列の最初の非スペース文字が有効な整数文字でない場合、文字列が空の場合、または文字列に空白文字のみが含まれている場合は、関数を変換する必要はありません。
いずれの場合も、関数が有効な変換を実行できない場合は、0を返します。
例:
回答:
class Solution:
def strToInt(self, str: str) -> int:
str = str.strip() # 删除首尾空格
if not str:
return 0 # 字符串为空则直接返回
res, i, sign = 0, 1, 1
int_max, int_min, bndry = 2 ** 31 - 1, -2 ** 31, 2 ** 31 // 10
if str[0] == '-':
sign = -1 # 保存负号
elif str[0] != '+':
i = 0 # 若无符号位,则需从 i = 0 开始数字拼接
for c in str[i:]:
if not '0' <= c <= '9' :
break # 遇到非数字的字符则跳出
if res > bndry or res == bndry and c > '7':
return int_max if sign == 1 else int_min # 数字越界处理
res = 10 * res + ord(c) - ord('0') # 数字拼接
return sign * res