leetcode 481. Magical String 神奇字符串+有点绕的题
2017-12-14 14:56
211 查看
A magical string S consists of only ‘1’ and ‘2’ and obeys the following rules:
The string S is magical because concatenating the number of contiguous occurrences of characters ‘1’ and ‘2’ generates the string S itself.
The first few elements of string S is the following: S = “1221121221221121122……”
If we group the consecutive ‘1’s and ‘2’s in S, it will be:
1 22 11 2 1 22 1 22 11 2 11 22 ……
and the occurrences of ‘1’s or ‘2’s in each group are:
1 2 2 1 1 2 1 2 2 1 2 2 ……
You can see that the occurrence sequence above is the S itself.
Given an integer N as input, return the number of ‘1’s in the first N number in the magical string S.
Note: N will not exceed 100,000.
Example 1:
Input: 6
Output: 3
Explanation: The first 6 elements of magical string S is “12211” and it contains three 1’s, so return 3.
计算题目中描述的有规律的字符串的前n个字符中‘1’的个数。先构造这个字符串(大小大于n即可),然后计算其中‘1’的个数。规律是当前i指向的数表示次数,当前字符串的末尾的数的“相反数”表示要添加的数,比如“122”,i=2指向2,字符串末尾为“2”,即在字符串后加2个1.
代码如下:
The string S is magical because concatenating the number of contiguous occurrences of characters ‘1’ and ‘2’ generates the string S itself.
The first few elements of string S is the following: S = “1221121221221121122……”
If we group the consecutive ‘1’s and ‘2’s in S, it will be:
1 22 11 2 1 22 1 22 11 2 11 22 ……
and the occurrences of ‘1’s or ‘2’s in each group are:
1 2 2 1 1 2 1 2 2 1 2 2 ……
You can see that the occurrence sequence above is the S itself.
Given an integer N as input, return the number of ‘1’s in the first N number in the magical string S.
Note: N will not exceed 100,000.
Example 1:
Input: 6
Output: 3
Explanation: The first 6 elements of magical string S is “12211” and it contains three 1’s, so return 3.
计算题目中描述的有规律的字符串的前n个字符中‘1’的个数。先构造这个字符串(大小大于n即可),然后计算其中‘1’的个数。规律是当前i指向的数表示次数,当前字符串的末尾的数的“相反数”表示要添加的数,比如“122”,i=2指向2,字符串末尾为“2”,即在字符串后加2个1.
代码如下:
#include <iostream> #include <vector> #include <map> #include <set> #include <queue> #include <stack> #include <string> #include <climits> #include <algorithm> #include <sstream> #include <functional> #include <bitset> #include <cmath> using namespace std; class Solution { public: int magicalString(int n) { string s = "122"; int i = 2; while (i < n) { s += string(s[i++] - '0', s.back() == '1' ? '2': '1'); } return count(s.begin(),s.begin()+n,'1'); } };
相关文章推荐
- [LeetCode] Magical String 神奇字符串
- LeetCode之计算字符串相似度或编辑距离EditDistance
- [LeetCode]415. Add Strings(计算两个字符串表示的数字的和)
- 【LeetCode 28_字符串_匹配】Implement strStr()
- Leetcode050--字符串的过渡
- LeetCode 541. Reverse String II (字符串翻转)
- leetCode 165. Compare Version Numbers 字符串
- leetCode 38. Count and Say 字符串
- leetcode【第七周】Z字形排序字符串
- BZOJ3790 神奇项链 解题报告【字符串】【Manacher】【树状数组】【数据结构优化DP】
- LeetCode Reverse String(字符串反转)
- Longest Palindromic Substring 在一个字符串里找最长回文子串@LeetCode
- leetcode 345. Reverse Vowels of a String 只反转字符串元音字符
- [LeetCode] 387. First Unique Character in a String 字符串的第一个唯一字符
- LeetCode 8. String to Integer (atoi)(字符串)
- Leetcode 345 Reverse Vowels of a String 字符串处理
- 【LeetCode-面试算法经典-Java实现】【008-String to Integer (atoi) (字符串转成整数)】
- leetcode excel表格列标题数字与字符串的转换
- leetcode最长回文字符串_动态规划
- LeetCode——344. Reverse String(字符串反转)