LeetCode 49-文字の異所性グループ化&50pow(x、n)&518人の女王

元の公開アカウント:bigsai良ければ、気に入って収集することを忘れないでください!bigsaiを
フォローして返信、Javaの高度なpdfリソース受け取り、グループ返信しLikouパンチグループに参加します。
先週のチェックインコンテンツ43文字列乗算と44ワイルドカードマッチング 45ジャンプゲームと46フルアレンジメント
昨日のチェックインコンテンツLeetCode 47フルアレンジメントⅡと48回転画像

文字の異音のグループ化

文字列の配列が与えられた場合、文字失読症を組み合わせます。脂肪族の単語は、同じ文字で配置が異なる文字列を指します。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

説明:

すべてのエントリは小文字です。
回答が出力される順序は考慮されません。

分析

タイトルの意味は、いくつかの文字列の単語を与えてから、すべて同じ文字を1つにまとめることList<String>です。私たちの中心的な質問は、これをどこに置くかです。

毎回ブルートフォース列挙を使用して判断することはできますが、それは非効率的であるため、ハッシュストレージを使用できますMap<String,List<String>>ストレージ用のHashMapのタイプを作成します
ここに写真の説明を挿入

実装コードは次のとおりです。

public List<List<String>> groupAnagrams(String[] strs) {
    
    
       List<List<String>>lists=new ArrayList<>();
       Map<String,List<String>>map=new HashMap<>();
       for(String str: strs)
       {
    
    
           char vachar[]=str.toCharArray();
           Arrays.sort(vachar);
           String team=String.copyValueOf(vachar);
           List<String>list=map.getOrDefault(team,new ArrayList<>());
           list.add(str);
           map.put(team,list);
       }
//        for(List<String> list:map.values())
//        {
    
    
//            lists.add(list);
//        }
       lists.addAll(map.values());
       return  lists;
   }

結果:
ここに写真の説明を挿入

Pow(x、n)

ここに写真の説明を挿入
明らかに高速指数アルゴリズムですが、私自身の迅速な指数導入を強くお勧めします:データ構造とアルゴリズム-これは最も簡単な迅速指数の説明かもしれませんが、
いくつかの点に注意する必要があります:

  • 負の数の処理、および負の数は、intの最小値に範囲外の符号変換値を加えたものである可能性がありますしたがって、負の数を正の数に変換すると、負の累乗を正の累乗に変換して計算することができます。たとえば、5 -2147483648 = 5 -1 x 5 -2147483647 =(1/5)x(1/5)2147483647intの範囲は[-2147483648,2147483647]です。
  • 停止条件に注意してください。理論的には、関数を書き直してわずかに最適化できますが、高速電力ログレベルの複雑さが比較的低いため、ここでは最適化せずに直接記述します。
 public double myPow(double x, int n) {
    
    
     if(n<0)
         return  (1.0/x)*myPow(1.0/x,-(n+1));
     if(n==0)
         return 1;
     else if(n%2==0)
         return myPow(x*x,n/2);
     else
         return x*myPow(x*x,n/2);
 }

ここに写真の説明を挿入

クイーンN

nクイーン問題は、n×nチェスボードにnクイーンを配置し、クイーンが互いに攻撃できないようにする方法を研究します。
ここに写真の説明を挿入
上の写真は、8つの女王の問題の解決策を示しています。
整数nが与えられた場合、すべての異なるnクイーン問題の解を返します。
各ソリューションには、n-クイーン問題の明確なポーン配置計画が含まれています。ここで、「Q」と「。」はそれぞれクイーンと空の位置を表します。

例:

输入:4
输出:[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。

ヒント:
クイーンはお互いを攻撃することはできません。つまり、2つのクイーンを同じ水平、垂直、または斜めの線上に置くことはできません。

エイトクイーンズの問題私はこの記事を読みます:バックトラックアルゴリズム|当時私たちを困惑させてきたエイトクイーンズの問題を思い出します。それはすでに非常に明確です。理解できない場合は、詳細に読むことができます。

特定の実装ではmap[][]、各場所のシンボル記録するためにマップが必要であり、ルールに従って保存されますが、StringBuilder[]ここで配列を使用して完了します。
また、1行ずつ方向を判断する場合、水平方向を判断する必要はありません。
コードを添付してください:

// boolean heng[];
 boolean shu[];
 boolean zuoxie[];
 boolean youxie[];

 	 public List<List<String>> solveNQueens(int n) {
    
    
	List<List<String>> list=new ArrayList<List<String>>();
	StringBuilder stringBuilder[]=new StringBuilder[n];
	for(int i=0;i<n;i++)
	{
    
    
		stringBuilder[i]=new StringBuilder();
		for(int j=0;j<n;j++)
		{
    
    
			stringBuilder[i].append('.');
		}
	}
	shu=new boolean[n];
	zuoxie=new boolean[n*2];
	youxie=new boolean[n*2];
	dfs(0,stringBuilder,list,n);
	return list;
 }

private void dfs(int index, StringBuilder sBuilder[], List<List<String>> list,int n) {
    
    
	// TODO Auto-generated method stub
	if(index==n)//存入
	{
    
    
		List<String>val=new ArrayList<String>();
		//StringBuilder sBuilder=new StringBuilder();
		for(int i=0;i<n;i++)
		{
    
    
			val.add(sBuilder[i].toString());
			
		}
		list.add(val);
	}
	else {
    
    
		for(int j=0;j<n;j++)
		{
    
    
			if(!shu[j]&&!zuoxie[index+j]&&!youxie[index+(n-1-j)])
			{
    
    
				shu[j]=true;
				zuoxie[index+j]=true;
				youxie[index+(n-1-j)]=true;
				//map[index][j]='Q';
				sBuilder[index].setCharAt(j, 'Q');
				dfs(index+1,sBuilder, list, n);
				shu[j]=false;
				zuoxie[index+j]=false;
				youxie[index+(n-1-j)]=false;
				sBuilder[index].setCharAt(j, '.');
				//map[index][j]='.';
				
			}
		}
	}	
}

常におなじみの100%:
ここに写真の説明を挿入

結論:了解しました今日はここにいます。元のテクノロジーのパブリックアカウントに注目してください:[ bigsai ]、グループに返信し、作成者のWeChatを追加してチェックインに参加してください。bigsai」に返信して、高度なリソースを入手してください
ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/qq_40693171/article/details/109411577