![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2545327c3500ab67448ffe095265e291.png)
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode ans = null;
for(int i=0 ; i<lists.length ; i++){
ans = mergeTwoLists(ans , lists[i]);
}
return ans;
}
public ListNode mergeTwoLists(ListNode ans , ListNode list){
if(ans==null || list==null)
return ans != null ? ans : list;
ListNode head =new ListNode(0);
ListNode tail = head, p1 = ans , p2 = list;
while(p1!=null && p2!=null){
if(p1.val < p2.val){
tail.next = p1;
p1 = p1.next;
}else{
tail.next = p2;
p2 = p2.next;
}
tail = tail.next;
}
tail.next = (p1!=null ? p1 : p2);
return head.next;
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b213fe34764b4802e20007af28f9e0a3.png)
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String , List<String>> map = new HashMap<String , List<String>>();
for(String str : strs){
int[] charArray = new int[26];
for(int i=0 ; i<str.length() ; i++){
charArray[str.charAt(i)-'a']++;
}
StringBuilder st = new StringBuilder();
for(int i=0 ; i<26 ; i++){
if(charArray[i]!=0){
st.append((char)('a'+i));
st.append(charArray[i]);
}
}
String key = st.toString();
List<String> list = map.getOrDefault(key, new ArrayList<String>());
list.add(str);
map.put(key , list);
}
return new ArrayList<List<String>>(map.values());
}
}
第二种方法,我们把每个字符串变成数组,然后对其排序,排序后作为key去比较, 其实和方法1差不多
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String , List<String>> map = new HashMap<String , List<String>>();
for(String str : strs){
char[] charArray = str.toCharArray();
Arrays.sort(charArray);
String key = new String(charArray);
List<String> list = map.getOrDefault(key , new ArrayList<String>());
list.add(str);
map.put(key , list);
}
return new ArrayList<List<String>>(map.values());
}
}