国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

leecode 解題總結:38 Count and Say

2019-11-10 19:15:07
字體:
來源:轉載
供稿:網友
#include <iostream>#include <stdio.h>#include <vector>#include <sstream>using namespace std;/*問題:The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...1 is read off as "one 1" or 11.11 is read off as "two 1s" or 21.21 is read off as "one 2, then one 1" or 1211.Given an integer n, generate the nth sequence.Note: The sequence of integers will be rePResented as a string.分析:此題本質就是按照順序數出每個數的出現次數,然后翻譯層字符串。1211:One 1,  One 2, Two 1,得到 111221111221:Three 1,Two 2,One 1,       31,22,11得到: 312211312211:One 3,Two 2,Two 1       13,22,21得到132221總結規律:將字符串分成多個部分,每一部分的值相同,數出每一部分對應元素個數num,組成對應值val新的子串: num val例如有11個2,那么變成112132221:11133211輸入:123456數出:111211211111221312211關鍵:1總結規律:將字符串分成多個部分,每一部分的值相同,數出每一部分對應元素個數num,組成對應值val新的子串: num val2 		for(int i = 1 ; i < len ; i++)		{			//找到相同元素			if(str.at(i) == value)			{				count++;			}			else			{				Result result(count , value);				results.push_back(result);				value = str.at(i);				count = 1;//計數器變成1,當前數出現1次			}		}		//最后一個元素還沒有統計,因為之前只是存放上一次的結果		Result result(count , value);		results.push_back(result);*/typedef struct Result{	Result(int times , char value):_times(times), _value(value){}	int _times;	char _value;}Result;class Solution {public:	string getNum(string str)	{		if(str.empty())		{			return "";		}		int len = str.length();		//開始進行數		char value = str.at(0);		int count = 1;		vector<Result> results;		for(int i = 1 ; i < len ; i++)		{			//找到相同元素			if(str.at(i) == value)			{				count++;			}			else			{				Result result(count , value);				results.push_back(result);				value = str.at(i);				count = 1;//計數器變成1,當前數出現1次			}		}		//最后一個元素還沒有統計,因為之前只是存放上一次的結果		Result result(count , value);		results.push_back(result);		//拼接結果		int size = results.size();		stringstream resultStream;		for(int i = 0 ; i < size ; i++)		{			resultStream << results.at(i)._times << results.at(i)._value;		}		string realResult = resultStream.str();		return realResult;	}	//注意這里的n為第幾個,初始元素為1    string countAndSay(int n) {		if(n <= 0)		{			return "";		}        //需要將整數轉換成字符串		string num("1");		if(1 == n)		{			return num;		}		string result;		for(int i = 2 ; i <= n ; i++)		{			result = getNum(num);			num = result;		}		return result;    }};void process(){	int n;	while(cin >> n)	{		Solution solution;		string result = solution.countAndSay(n);		cout << result << endl;	}}int main(int argc , char* argv[]){	process();	getchar();	return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 达日县| 嘉义市| 汉阴县| 来安县| 宁化县| 邵武市| 沂水县| 株洲县| 萝北县| 沐川县| 永新县| 绥中县| 通渭县| 安阳市| 富锦市| 东明县| 伽师县| 新巴尔虎右旗| 洛川县| 历史| 新宁县| 边坝县| 河曲县| 安新县| 馆陶县| 神木县| 册亨县| 浦县| 乌鲁木齐县| 延寿县| 太保市| 门头沟区| 齐河县| 那曲县| 尉氏县| 武宣县| 泽库县| 西贡区| 青海省| 达尔| 正定县|