LeetCode 49-буквенная эктопическая группировка и 50pow (x, n) и 51 восемь королев

Оригинальный паблик аккаунт: bigsaiЕсли он хороший, не забывайте ставить лайки и собирать!
Подпишитесь на bigsai и ответьте на него, чтобы получить расширенные ресурсы Java в формате pdf, и ответьте группе, чтобы присоединиться к группе Likou punch. Контент, отмеченный на
прошлой неделе : умножение 43 строк и сопоставление подстановочных знаков 44 45 игра с прыжками и 46 полная компоновка
Контент, отмеченный вчера : LeetCode 47 полное расположение и 48 вращающихся изображений

Буквенная дисфорическая группировка

Получив массив строк, объедините буквенную дислексию вместе. Алифатические слова относятся к строкам с одинаковыми буквами, но разным расположением.

示例:

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

Описание:

Все записи пишутся строчными буквами.
Порядок вывода ответов не рассматривается.

анализ

Смысл заголовка - дать несколько строковых слов, а затем соединить все одинаковые буквы в одну 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 × 5 -2147483647 = (1/5) х (1/5) 2147483647 . Диапазон int - [-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 皇后问题存在两个不同的解法。

Совет:
королевы не могут атаковать друг друга, то есть две ферзя не могут находиться на одной горизонтальной, вертикальной или диагональной линии.

Я прочитаю эту статью о проблеме восьми ферзей: алгоритм обратного отслеживания | Вспоминая о проблеме восьми ферзей, которая ставила нас в тупик в те годы . Она уже очень ясна. Если вы не понимаете, вы можете изучить ее подробно.

В конкретной реализации требуется map[][]карта для записи символов каждого местоположения, которая затем сохраняется в соответствии с правилами, но StringBuilder[]для завершения я использую здесь массив.
Кроме того, при оценке направления построчно, нет необходимости определять горизонтальное направление.
Прикрепите код:

// 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