LeetCode 二分木問題集(その2)
101 対称二分木
二分木の根ノード root が与えられたとき、木が対称構造か判定する。
class Solution {
public boolean isSymmetric(TreeNode root) {
if (root == null) return true;
return checkNodes(root.left, root.right);
}
private boolean checkNodes(TreeNode leftNode, TreeNode rightNode) {
if (leftNode == null ...
5月18日 15:41 投稿
LeetCode解説:216.組合せ総和IIIと17.電話番号の文字列組み合わせ [バックトラッキング編]
LeetCode 216.組合せ総和III
問題リンク:216.組合せ総和III
問題説明
1から9までの数字からk個の数字を選び、その合計がnとなるすべての有効な組み合わせを見つけます。以下の条件を満たす必要があります:
使用できる数字は1から9まで
各数字は最大で1回まで使用可能
結果には重複する組み合わせを含めない
例1:
入力:k = 3, n = 7
出力: [[1,2,4]]
説明: 1 + 2 + ...
5月18日 15:03 投稿
素数和组合问题の解法
問題概要
与えられたn個の整数と整数k(k < n)があり、その中からk個の数を選んで和をとったときに、その和が素数になる組み合わせ数を求める問題。
例としてn=4, k=3で、数列が3,7,12,19のとき、選べる組み合わせは4通りある:
3+7+12 = 22
3+7+19 = 29
7+12+19 = 38
3+12+19 = 34
このうち素数は29のみなので、出力は1となる。
入出力形式
入力形式:
4 3 ...
5月14日 23:45 投稿
Pythonでフィボナッチ数列を応用した階段の登り方を求解する
問題概要と考察
この問題では、n段の階段を1段または2段ずつ登る場合の、登り方の総数を求める必要があります。各段数における解を観察すると、フィボナッチ数列と同じパターンに従っていることが分かります。
1段:1通り
2段:2通り(1+1 または 2)
3段:3通り(1+1+1、1+2、2+1)
4段:5通り(1+1+1+1、1+1+2、1+2+1、2+1+1、2+2)
つまり、n段目までの登り方の総数 ...
5月14日 19:00 投稿
マージソートのアルゴリズムとその実装
配列マージの基本
マージソートの核となる処理は、すでに整列済みの2つの部分配列を効率的に結合することです。たとえば、ar1[] = {1,2,3,4} と ar2[] = {3,4,5,6,7} の2つの配列があるとします。これらを効率的にマージするには、それぞれの配列にポインタを用意しておき、値を比較しながら新しい配列に格納していきます。
#include <stdio.h>
#include <stdli ...
5月14日 18:52 投稿
バイナリツリーの基礎理論と再帰的走査アルゴリズム
バイナリツリーの基本概念
バイナリツリーは計算機科学における重要なデータ構造であり、多くのアルゴリズムでスタックを用いて実装されます。
バイナリツリーの分類
完全二分木 (Full Binary Tree)
すべてのノードが0個または2個の子ノードを持ち、すべての葉ノードが同じ深さにある二分木を完全二分木と呼びます。深さkの完全二分木は2^k-1個のノードを持ちます。
完 ...
5月14日 12:57 投稿
Go言語における関数の実践的な使い方
1. 可変長引数関数
Go言語では、引数の前に省略符号(...)を付けることで、任意の数の引数を受け取る関数を定義できます。
package main
import "fmt"
// 複数の文字列を受け取り、結合して出力する関数
func concat(elements ...string) {
result := ""
for _, elem := range elements {
result += elem + ","
}
fmt.Println(result)
}
fu ...
5月9日 13:56 投稿