Оригинальный паблик аккаунт:
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, чтобы получить дополнительные ресурсы.