はじめに
LeetCodeの問題を解答します。
なるべく、問題の和訳と詳細なコメントを書いています。
余裕があれば、複数のアプローチの解答と、実際の面接を想定して英語での解法やコメントを書いています。
様々なカテゴリの問題をランダムにあたる方法も良いですが、
二分探索、連結リストなど、テーマを絞って集中的に解いた方が練習しやすい方は以下の記事が有用です。
テーマごとに問題を分類しました。
LeeetCodeの問題をアルゴリズムとデータ構造による分類しました。
また、LeetCodeではAtcoderと違ってクラスと関数を定義して解答します。
LeetCodeに特有の内容など、知っておくと役に立つかもしれないことをまとめています。
はじめてLeetCodeに触れる方はこちらの記事も役に立つと思います。
ポイント
-
- ビットシフト
この記事で得られること
-
- 初歩的なビットシフトの操作方法がわかる
詳細
問題
原文
Given an integer
n
, returntrue
if it is a power of two. Otherwise, returnfalse
.An integer
n
is a power of two, if there exists an integerx
such thatn == 2x
.
Example 1:
123 Input: n = 1Output: trueExplanation: 2<sup>0</sup> = 1Example 2:
123 Input: n = 16Output: trueExplanation: 2<sup>4</sup> = 16Example 3:
12 Input: n = 3Output: false
Constraints:
-231 <= n <= 231 - 1
内容(和訳)
整数nが与えられます。それが2のべき乗であればtrueを返してください。
そうでない場合は、falseを返してください。
整数nが2のべき乗であるのは、n==2xとなるような整数xが存在するときです。
※正しくない可能性があります。
解答
解答1:Python,繰り返し(iterative)
1 2 3 4 5 6 7 8 9 10 11 |
class Solution: def isPowerOfTwo(self, n: int) -> bool: count = 0 number = 2**count while n>=number: if number == n: return True count+=1 number = 2**(count) return False |
解答2:Python,ビットシフト,繰り返し(iterative)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Solution: def isPowerOfTwo(self, n: int) -> bool: #numberを1で初期化、この後while文で2倍し続ける。 number = 1 #numberがnを越えるまで繰り返す while n>=number: #nと一致したらTrueを返す。 if number == n: return True #numberを左にビットシフト ※10進数では2倍、2進数では下1桁に0が追加される number <<= 1 #while文を抜けたらFalseを返す return False |
解答3:ループ・再帰ナシ ※フォローアップ
後日要確認
終わりに
補足・参考・感想
問題を分類しました。テーマごとに集中して問題を解くことができます。
LeeetCodeの問題をアルゴリズムとデータ構造による分類
LeetCodeに特有の内容など、知っておくと役に立つかもしれないことをまとめました。
疑問が解決した方は他の問題もどうぞ
コメント