给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成4A1B2C1D2A。
#include<iostream>
#include<string>
#include<stack>
using namespace std;
string intToStr(int n){
stack<char> s;
if(n==0)return "0";
string str="";
while(n!=0){
s.push(n%10+'0');
n=n/10;
}
while(!s.empty()){
str+=s.top();
s.pop();
}
return str;
}
int main()
{
string s,r;
cin>>s;
int c=0;
char ch=s[0];
int p=0;
while(p<s.size()){
if(s[p]==ch){
c++;
}
else{
r+=intToStr(c);
r+=ch;
ch=s[p];
c=1;
}
if(p==s.size()-1){
r+=intToStr(c);
r+=ch;
}
p++;
}
cout<<r;
return 0;
}
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
要点:注意边界条件。
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int min(int a, int b) { return (a < b) ? a : b; }
vector<int> printMatrix(vector<vector<int> > matrix) {
int x = matrix.size() - 1, y = matrix[0].size() - 1;
if (x == 0)return matrix[0];
if (y == 0) {
vector<int> v;
for (int i = 0;i <= x;i++)v.push_back(matrix[i][0]);
return v;
}
int laststart = min(x, y) / 2, start = 0;
vector<int> v;
while (start <= laststart) {
int i = start, j = start;
if(i!=x&&j!=y){
while (j <= y) {
v.push_back(matrix[i][j]);
j++;
}
j--;i++;
while (i <= x) {
v.push_back(matrix[i][j]);
i++;
}
i--;j--;
while (j >= start) {
v.push_back(matrix[i][j]);
j--;
}
i--;j++;
while (i > start) {
v.push_back(matrix[i][j]);
i--;
};
start++;
x--;y--;
}
else {
while (j <= y) {
v.push_back(matrix[i][j]);
j++;
}
j--;i++;
while (i <= x) {
v.push_back(matrix[i][j]);
i++;
}
break;
}
}
return v;
}
};
int main()
{
vector<int> v1 = { 1,2,3,4,5 };
vector<int> v2 = { 6,7,8,9,10 };
vector<int> v3 = { 11,12,13,14,15 };
//vector<int> v4 = { 4 };//{ 16,17,18,19,20 };
//vector<int> v5 = { 5 };//{ 21,22,23,24,25 };
vector<vector<int> > v = { v1,v2,v3 };
Solution x;
vector<int> v6 = x.printMatrix(v);
return 0;
}