48. 旋转图像
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
#include<vector>
//原地旋转图像,不能单纯改变输出
//旋转90度可以看成是先转置,再交换列
using namespace std;
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
//首先是对角元素相互交换
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
swap(matrix[i][j],matrix[j][i]);
}
}
//然后交换列
for (int i = 0; i < n; i++) {
int a = 0;
int b = matrix[i].size() - 1;
while (a < b) {
swap(matrix[i][a++],matrix[i][b--]);
}
}
}
void swap(int &a, int &b) {
int tmp;
tmp = a;
a = b;
b = tmp;
}
};
int main()
{
vector<vector<int>> matrix;
Solution bb;
int n;//表示行和列的数目
cin >> n;
for (int i = 0; i < n; i++) {
vector<int> line;
for (int j = 0; j < n; j++) {
int tmp;
cin >> tmp;
line.push_back(tmp);
}
matrix.push_back(line);
}
bb.rotate(matrix);
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
49. 字母异位词分组
本题通过率是100/101,有一个例子超时了。
#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> result;
string tmp1;//临时变量
string tmp2;
int i=0, j=0;
while(i<strs.size()) {//使用while循环效果也是很好的
vector<string> vec;
vec.push_back(strs[i]);
j = i + 1;
while(j<strs.size()) {
tmp1 = strs[i];
tmp2 = strs[j];//这是深拷贝
sort(tmp1.begin(),tmp1.end());
sort(tmp2.begin(), tmp2.end());
if (tmp1 == tmp2) {
vec.push_back(strs[j]);
strs.erase(strs.begin() + j);//这种使用下标的方式和使用迭代器的方式不一样
}
else j++;
}
result.push_back(vec);
strs.erase(strs.begin()+i);
}
return result;
}
};
int main()
{
vector<string> strs;
int n;//表示响亮里面字符的个数
Solution bb;
cin >> n;
for (int i = 0; i < n; i++) {
string tmp;//每次都是重新生成的才对
cin >> tmp;
strs.push_back(tmp);
}
vector<vector<string>> result = bb.groupAnagrams(strs);
for (int i = 0; i < result.size(); i++) {
for (int j = 0; j < result[i].size(); j++) {
cout << result[i][j] << ' ';
}
cout << endl;
}
return 0;
}
//关于指针什么的还得找时间练习,感觉又有一点生疏了!!!
据说可以使用哈希表解决这个问题————以下是别人写的代码。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>>re;
int index = 0; //返回结果的字母异位词索引(表示该字母异位词出现的顺序号)
unordered_map<string, int> myMap; //用于保存排序后的单词及其字母异位词索引
string str;
for (int i = 0; i<strs.size(); ++i){
str = strs[i];
sort(str.begin(), str.end());
if (myMap.find(str) == myMap.end()){
myMap[str] = index; //第index个出现的异位词
++index;
re.push_back(vector<string>{}); //返回结果多加一行
}
re[myMap[str]].push_back(strs[i]);
}
return re;
}
};
是按照vector{}这种方式进行初始化的吗??