2つ以下のビット
6382 ワード
問題の説明
正の整数xを定義する関数f(x)は、以下のようになります. xより大きく、xとビットの1から2の異なる数の中で最小の数は である.
たとえば、f(2)=3.2より大きい数字では、ビット数の異なる点は2個未満であり、最小の数は3であるため、以下の表に示す. f(7)=11.7より大きい数字では、ビット数の異なる点は2個未満であり、最小の数は11であるため、以下の表に示す.
せいげんじょうけん1≦数字の長さ≦10000 0≦numbersのすべての数≦1015 I/O例
I/O例#1
問題の例を以下に示します.
方法
この問題に最初に触れたとき,while文では現在の数字とnumber+i間のXOR演算を用いて,得られた結果値をbin()処理し,1の個数が2の場合を正解とした.答えはいいですが、入力値が大きくなるとcount()関数が時間的に複雑になり、もちろんタイムアウトが発生します.
だから他のパターンを探しているときに、偶数を入力すると、バイナリで表すと一番後ろに0が加算され、偶数を入力すると、その数より1大きい正解が返ってくることがわかりました.
奇数の場合、2進数列の一番後ろの01を10に変更できます.バイナリ表示文字列が1のみの場合を防ぐため、先頭に0を付けてバイナリ表示文字列を逆さにし、10が発生した場合は01に変更してループを終了し、int()関数を使用して10進数に変換し、正解を返します.
テスト7,8,9で実行時エラーが発生し続け、関数呼び出し時にパラメータの前にintを付けて解決しました.テストケースにはint型ではなく入力があるようです.関数fをnumberとしてパラメータとして宣言します.
->numberが偶数の場合はnumber+1を返します.
->その他の場合、
-->
-->
-->tmpを反転します.
-->tmp長が重複するiのfor文.
-->
------>tmpを
-->tmp 1は、tmpを反転する文字列のint型を格納する.
-->tmp 1を返します. の正解を保存したリストの正解はnumberを巡回し、 の答えを返します. solution.py
正の整数xを定義する関数f(x)は、以下のようになります.
たとえば、
수 비트 다른 비트의 개수
2 000...0010
3 000...0011 1
수 비트 다른 비트의 개수
7 000...0111
8 000...1000 4
9 000...1001 3
10 000...1010 3
11 000...1011 2
パラメータは、整数を含む配列番号です.numbersのすべての数について、解関数を完了し、各数のf値を配列に順次読み込み、返します.せいげんじょうけん
numbers result
[2,7] [3,11]
I/O例説明I/O例#1
問題の例を以下に示します.
方法
この問題に最初に触れたとき,while文では現在の数字とnumber+i間のXOR演算を用いて,得られた結果値をbin()処理し,1の個数が2の場合を正解とした.答えはいいですが、入力値が大きくなるとcount()関数が時間的に複雑になり、もちろんタイムアウトが発生します.
だから他のパターンを探しているときに、偶数を入力すると、バイナリで表すと一番後ろに0が加算され、偶数を入力すると、その数より1大きい正解が返ってくることがわかりました.
奇数の場合、2進数列の一番後ろの01を10に変更できます.バイナリ表示文字列が1のみの場合を防ぐため、先頭に0を付けてバイナリ表示文字列を逆さにし、10が発生した場合は01に変更してループを終了し、int()関数を使用して10進数に変換し、正解を返します.
テスト7,8,9で実行時エラーが発生し続け、関数呼び出し時にパラメータの前にintを付けて解決しました.テストケースにはint型ではなく入力があるようです.
->numberが偶数の場合はnumber+1を返します.
->その他の場合、
-->
bin(number)
を一時変数tmpに格納する.-->
tmp[:2]+'0'+tmp[2:]
を介してtmpを前面に追加します.-->tmpを反転します.
-->tmp長が重複するiのfor文.
-->
tmp[i-1]
が1tmp[i]
で0の場合、------>tmpを
tmp[:i-1]+'01'+tmp[i+1:]
に更新し、繰り返し文を終了します.-->tmp 1は、tmpを反転する文字列のint型を格納する.
-->tmp 1を返します.
f(int(number))
の結果を呼び出して埋め込まれる.def solution(numbers):
def f(number):
if int(number)%2==0:
return number+1
else:
tmp=bin(number)
tmp=tmp[:2]+'0'+tmp[2:]
tmp=tmp[::-1]
for i in range(1, len(tmp)):
if tmp[i-1]=='1' and tmp[i]=='0':
tmp=tmp[:i-1]+'01'+tmp[i+1:]
break
tmp1=int(tmp[::-1], 2)
return tmp1
answer=[f(int(number)) for number in numbers]
return answer
Reference
この問題について(2つ以下のビット), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/Programmers-CodingTest-Python-2개-이하로-다른-비트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol