5、基本字符串压缩
利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。
测试样例
"aabcccccaaa"
返回:"a2b1c5a3"
"welcometonowcoderrrrr"
返回:"welcometonowcoderrrrr"
完整代码实现–我的思路
class Zipper {
public:
string num2str(int i)
{
stringstream ss;
ss << i;
return ss.str();
}
string zipString(string iniString) {
// write code here
string str;
int count = 0;
char c = *(iniString.begin());
for (auto ir = iniString.begin(); ir < iniString.end(); ++ ir)
{
if (*ir == c)
++ count;
else
{
str += c + num2str(count);
c = *ir;
count = 1;
}
}
str += c + num2str(count);
if (iniString.size() < str.size())
return iniString;
else
return str;
}
};
牛客比较好的代码实现
class Zipper {
public:
string zipString(string iniString)
{
// write code here
if (iniString.size() == 0|| iniString.size() == 1)
return iniString;
string res;
char c = iniString[0];
int num = 0;
for (int i = 0; i < iniString.size(); i++)
{
if (i != iniString.size() - 1 && iniString[i] == c)
num++;
else if (i == iniString.size() - 1 && iniString[i] == c)
{
num++;
res += c;
res += to_string(num);
}
else if (i != iniString.size() - 1 && iniString[i] != c)
{
res += c;
res += to_string(num);
num = 1;
c = iniString[i];
}
else
{
res += c;
res += to_string(num);
res += iniString[i];
res += '1';
}
}
if (res.size() < iniString.size())
return res;
else
return iniString;
}
};
6、像素翻转
有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。
测试样例
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]
完整代码实现——我的思路
class Transform {
public:
vector<vector<int> > transformImage(vector<vector<int> > mat, int n) {
// write code here
vector<vector<int>> m;
vector<int> k;
for (int i = 0; i < n; ++ i)
{
for (int j = n - 1; j >= 0; -- j)
{
k.push_back(mat[j][i]);
}
m.push_back(k);
k.clear();
}
return m;
}
};
牛客代码
class Transform {
public:
vector<vector<int> > transformImage(vector<vector<int> > mat, int n) {
// write code here
vector<vector<int>> temp=mat;
int max=n-1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
temp[j][max]=mat[i][j];
}
max--;
}
return temp;
}
};