38.
第二种反而效率更高一些!
class Solution {
public:
string countAndSay(int n) {
return helper("1", n, 1);
}
string helper(string s, int n, int index){
if(index == n){
return s;
}
int nums =1;
string s1;
for(int i=0; i< s.size(); i++){
if(i<s.size()-1 && s[i] == s[i+1]){
nums++;
continue;
}
s1 += to_string(nums) + s[i];
nums = 1;
}
return helper(s1, n, index+1);
}
};
class Solution {
public:
string ans;
string countAndSay(int n) {
helper("1", n, 1);
return ans;
}
void helper(string s, int n, int index){
if(index == n){
ans = s;
return;
}
int nums =1;
string s1;
for(int i=0; i< s.size(); i++){
if(i<s.size()-1 && s[i] == s[i+1]){
nums++;
continue;
}
s1 += to_string(nums) + s[i];
nums = 1;
}
helper(s1, n, index+1);
}
};
//不要总加,也有减的、
class Solution {
public:
string countAndSay(int n) {
if(n == 1) return "1";
string pre = countAndSay(n-1), ans;
int count = 1;
for(int i = 0; i < pre.size(); i++)
{
if(pre[i] != pre[i + 1])
{
ans += (count + '0');
ans += pre[i];
count = 0;
}
count++;
}
return ans;
}
};
443.不会!
错了,如何删一个??
class Solution {
public:
int compress(vector<char>& chars) {
int num =1;
int index =0;
for(int i=0; i<chars.size(); i++){
if(i<chars.size()-1 && chars[i]==chars[i+1]){
if(num >2) chars.erase(chars[i]);
index = i;
num++;
continue;
}
if(num != 1) chars[index +1] = to_string(num);//出现超过一次,
}
return chars.size();
}
};
class Solution {
public:
int compress(vector<char>& chars) {
int rear = -1, l = 0, r = 0;
while(r < chars.size()){
l = r;
while(r < chars.size() && chars[l] == chars[r])r++;
chars[++rear] = chars[l];
if(r - l == 1) continue;
for(const auto& x:to_string(r - l)) chars[++rear] = x;
}
return rear + 1;
}
};