564。最も近い回文を見つけます
難易度:難しい
トピック:数学、文字列
整数を表す文字列 n が与えられると、_最も近い整数 (それ自体は含まない) を返します。これは回文です。同点の場合は、小さい方を返してください。
最も近いものは、2 つの整数の間で最小化された絶対差として定義されます。
例1:
例 2:
- 入力:n = "1"
- 出力:"0"
- 説明:0 と 2 は最も近い回文ですが、最小の 0 を返します。
制約:
1 n は数字のみで構成されます
n には先行ゼロがありません。
n は [1, 10
- 18- 1] の範囲の整数を表します。
ヒント:
この問題に対してブルートフォースは機能しますか?別のことを考えてください。
1234、999、1000などの例をいくつか取り上げ、それらに最も近い回文を確認してください。さまざまなケースが何通り考えられますか?
文字列の左半分のみを考慮する必要がありますか、それとも右半分だけを考慮する必要がありますか?
これらの数字から最も近い回文を見つけてください - 12932、99800、12120。何か気づきましたか?
解決策:
潜在的な回文候補を生成し、入力数値に最も近いものを選択する関数の作成に焦点を当てます。
解決策のアプローチ:
回文候補を特定する:
数字の前半をミラーリングして回文を作成します。
すべての数字が 9、100...001、または 99...99 であるような特殊なケースを考慮してください。
数値の中央を 1 ずつ上下に変更して回文を生成します。
最も近い回文を計算する:
回文候補ごとに、元の数値との差の絶対値を計算します。
差が最も小さい回文を返します。同点の場合は、小さい方の回文を返します。
このソリューションを PHP で実装しましょう:
564。最も近い回文を見つけます
リーリー
説明:
- 回文生成($firstHalf, $isOddLength):
このヘルパー関数は、数値の前半をミラーリングして回文を作成します。
リーリー
エッジケース:
100...001 や 99...99 などの数値から生成された回文は、これらのケースを明示的にチェックすることで処理されます。
メインロジック:
考えられる回文を計算し、絶対差を比較することで最も近い回文を見つけます。
このソリューションは、考えられる回文の候補を効率的に絞り込み、少数のオプションのみを考慮して最も近いものを選択するため、総当りのアプローチよりもはるかに高速になります。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で
リポジトリにスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとってとても意味のあるものになります!
このような役立つコンテンツが必要な場合は、お気軽にフォローしてください:
以上が。最も近い回文を見つけるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。