これは、喜びと喜びの最初の本である367、最初の更新395ピアンオリジナル
01の質問と準備ができて見えます
今日導入さLeetCode
における演算問題Easy
最初のレベル229
(全体のタイトル番号がタイトル970
)。2つの正の整数を考えるx
とy
、いくつかの整数のための場合i >= 0
とでj >= 0
等しくx^i + y^j
、その整数は強力です。
戻り値は以下に等しいbound
すべての強力な整数のリスト。
あなたは、任意の順序で答えを返すことができます。あなたの答えでは、それぞれの値は、最高1回表示されます。例えば:
入力:Y、X = 2、= 3 、10 =結合
[2,3,4,5,7,9,10]:出力
説明:
2 + 0 = 2 ^ 3 ^ 0
3 = 2 + 1 ^ 3 ^ 0を
4 + 0 = 2 ^ 3 ^ 1
5 = 2 + 1 ^ 3 ^ 1
。7 = 2 ^ 2 ^ 3 1 +
9 = 2 ^ 3 ^ 3 + 0
10 = 0 + 2 ^ 2 ^ 3
入力:X = 3、Y = 5 、バインド= 15
出力:[2,4,6,8,10,14]
注意:
1 <= X <= 100
1 <= Y <= 100
0 <=結合<= 10 ^ 6
02第一溶液
判定条件xまたはyがあるので、直接タイトルを翻訳することができ、特別なスキルは、あまり少数政党よりも、それを注意する必要がないbound
場合、x
またはy
、1の時のように、何の力が1になることはありませうことは下回っているだろうbound
、それは無限ループになります。
public List<Integer> powerfulIntegers(int x, int y, int bound) {
Set<Integer> set = new HashSet<Integer>();
for (int i=0; Math.pow(x, i) < bound; i++) {
for (int j=0; Math.pow(y, j) < bound; j++) {
int sum = (int)Math.pow(x, i)+(int)Math.pow(y, j);
if (sum <= bound) {
set.add((int)sum);
}
// y等于1时,容易造成死循环,要结束掉
if (y == 1) {
break;
}
}
// x等于1时,容易造成死循环,要结束掉
if (x == 1) {
break;
}
}
return new ArrayList<>(set);
}
03第二の溶液
上記の最初のソリューションのために、我々は助けることができないMath
クラスのpow
メソッドを、総交換を掛け、アイデアは同じです。
public List<Integer> powerfulIntegers2(int x, int y, int bound) {
Set<Integer> set = new HashSet<Integer>();
for (int i=1; i<bound; i *= x) {
for (int j=1; j<bound; j *= y) {
if (i+j <= bound) {
set.add(i+j);
}
if (y == 1) {
break;
}
}
if (x == 1) {
break;
}
}
return new ArrayList<>(set);
}
04まとめ
テーマ別のアルゴリズムは、継続的にされている日以上7ヶ月、特集記事のアルゴリズム235件の +記事、公衆番号]ダイアログボックスの返信[ データ構造とアルゴリズム ]、[ アルゴリズム ]、[ データ構造 ]のいずれかの記事のコレクションのシリーズを取得するキーワード。
それは、すべてだあなたは何か良い解決策のアイデア、提案やその他の問題がある場合、あなたは以下のコメントを交換することができ、親指、メッセージ転送およびサポートは、私にとっての最大の報酬です!