本文主要是介绍算法题(316),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串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;
}
这篇关于算法题(316)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!