1 Rotate Image
You are given an n x n 2D matrix representing an image.Rotate the image by 90 degrees (clockwise).
对于 n x n 的矩阵按顺时针旋转90度,相当于先将矩阵上下翻转,然后将矩阵装置。
void rotate(vector<vector<int>>& matrix) {
if (matrix.empty()) return;
int len=matrix.size(),temp;
for(int i=0;i<len/2;i++)
{
for(int j=0;j<len;j++)
{
temp=matrix[len-1-i][j];
matrix[len-1-i][j]=matrix[i][j];
matrix[i][j]=temp;
}
}
for(int i=0;i<len;i++)
{
for(int j=0;j<i;j++)
{
temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
return;
}
对于长宽不等的图像旋转任意角度,常规方法是利用点的旋转变换公式:
vector<vector<int>> Rotate(vector<vector<int>>& matrix, float angle)
{
int len = (int)(sqrt(pow(matrix.size(), 2) + pow(matrix[0].size(), 2)) + 0.5);
vector<vector<int> > retMat(len,vector<int>(len,0);
float anglePI = angle * CV_PI / 180;
int xSm, ySm;
for(int i = 0; i < retMat.size(); i++)
for(int j = 0; j < retMat.size(); j++)
{
xSm = (int)((i-retMat.size()/2)*cos(anglePI) - (j-retMat..size()/2)*sin(anglePI) + 0.5);
ySm = (int)((i-retMat.size()/2)*sin(anglePI) + (j-retMat..size()/2)*cos(anglePI) + 0.5);
xSm += matrix.size() / 2;
ySm += matrix[0].size() / 2;
if(xSm >= matrix.size() || ySm >= matrix[0].size() || xSm <= 0 || ySm <= 0){
retMat[i, j] = Vec3b(0, 0);
}
else{
retMat[i, j] = matrix[xSm, ySm];
}
}
return retMat;
}
2 Anagrams
Given an array of strings, return all groups of strings that are anagrams.Note: All inputs will be in lower-case.
anagrams指的是字符相同只是顺序不同的字符串。我们先对每一个字符串排序,将排序后的字符串作为字典的key值,将排序前的字符串做为value值。然后遍历字典,如果value值大于1怎构成anagrams。
vector<string> anagrams(vector<string>& strs) {
vector<string> ret;
map<string,vector<string> >m;
for(int i = 0 ; i < strs.size() ; i++)
{
string tmp=strs[i];
sort(tmp.begin(),tmp.end());
m[tmp].push_back(strs[i]);
}
for(map<string,vector<string> >::iterator it = m.begin(); it != m.end(); it++)
{
if ( (it->second).size() > 1 )
{
for(vector<string>::iterator it1 = (it->second).begin(); it1!= (it->second).end(); it1++)
ret.push_back(*it1);
}
}
return ret;
}
原文地址:http://blog.csdn.net/zhulong890816/article/details/45817607