LeetCode Count and Say 数数字

 1 class Solution {
 2 public:
 3     string countAndSay(int n) {
 4     if(n==1)    return "1";
 5     string str0="",str1="1";
 6     int i,t,count;
 7     char c=‘*‘;
 8     for(i=0;i<n-1;i++){    //一共要数n-1次,假如n=2,那么只要数str1这一次就行了
 9         count=1;
10         if(i%2!=0){    //i为奇数,数str0
11             c=str0[0];
12             str1="";
13             while(c!=‘\0‘){    //将str0 转到str1
14                 t=1;
15                 if(str0[count]!=‘\0‘){
16                     while(str0[count]==c){    //判断前一个字符串里有多少个同样的,记录为count+1次
17                         count++;    //记录读出串的位置
18                         t++;        //记录相同字的个数
19                     }
20                     str1=str1+char(t+‘0‘);    //记录到str1中
21                     str1=str1+c;
22                     c=str0[count++];
23                 }
24                 else{
25                     str1=str1+char(t+‘0‘);    //记录到str1中
26                     str1=str1+c;
27                     c=‘\0‘;
28                 }
29             }
30         }
31         else{    //i为偶数,数str1
32             c=str1[0];
33             str0="";
34             while(c!=‘\0‘){    //将str0 转到str1
35                 t=1;
36                 if(str1[count]!=‘\0‘){
37                     while(str1[count]==c){    //判断前一个字符串里有多少个同样的,记录为count+1次
38                         count++;    //记录读出串的位置
39                         t++;        //记录相同字的个数
40                     }
41                     str0=str0+char(t+‘0‘);    //记录到str1中
42                     str0=str0+c;
43                     c=str1[count++];
44                 }
45                 else{
46                     str0=str0+char(t+‘0‘);    //记录到str1中
47                     str0=str0+c;
48                     c=‘\0‘;
49                 }
50             }
51         }
52     }
53     if(n%2==0)
54         return str0;
55     else
56         return str1;
57  }
58 };

题意:

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.

当n=1时,返回1;

当n=2时,返回11;  //数n-1时所返回的数,就是1个1的意思

当n=3时,返回21;  //也就是数n=2时所要返回的数,就是两个1;

当n=4时,返回1211;  //可以看到n=3时返回的是21,有一个2和一个1,即1211

。。。。。

类推下去,格式是这样子的     [多少个][什么样的字符][多少个][什么样的字符]。。。。

思路:

用两个字符串,从n=1开始数,完了存到一个字符串,这个字符串的内容就是n=2所需要返回的。再数这个字符串里的东西,存到另一个字符串。

控制好数的次数就行了,问题不大。

时间: 2024-10-12 20:26:55

LeetCode Count and Say 数数字的相关文章

LeetCode: Count and Say [037]

[题目] 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. G

LeetCode:至少是其他数字两倍的最大数【747】

LeetCode:至少是其他数字两倍的最大数[747] 题目描述 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素的索引,否则返回-1. 示例 1: 输入: nums = [3, 6, 1, 0] 输出: 1 解释: 6是最大的整数, 对于数组中的其他整数, 6大于数组中其他元素的两倍.6的索引是1, 所以我们返回1. 示例 2: 输入: nums = [1, 2, 3, 4] 输出: -1 解释: 4没有超过

java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果

1 package com.llh.demo; 2 3 import java.util.Scanner; 4 5 /** 6 * 7 * @author llh 8 * 9 */ 10 public class Test { 11 /* 12 * 将任意一个十进制数数字转换为二进制形式,并输出转换后的结果(使用数组存储) 13 */ 14 public static void main(String[] args) { 15 Scanner sc = new Scanner(System.in

1770 数数字

1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 统计一下由数字a组成的n位数与b相乘结果中含有多少个数字d; (引自原题目) 样例解释: 3333333333*3=9999999999,里面有10个9. Input 多组测试数据. 第一行有一个整数T,表示测试数据的数目.(1≤T≤5000) 接下来有T行,每一行表示一组测试数据,有4个整数a,b,d,n. (1≤a,b≤9,0≤d≤9,1≤n≤10^9) Output 对于每一组数据,输出一个整数占一行,表示答案. Inp

51nod 数数字(水题)

题目链接: 数数字 基准时间限制:1 秒 空间限制:262144 KB 统计一下 aaa ? aaa n个a × b 的结果里面有多少个数字d,a,b,d均为一位数. 样例解释: 3333333333*3=9999999999,里面有10个9. Input 多组测试数据. 第一行有一个整数T,表示测试数据的数目.(1≤T≤5000) 接下来有T行,每一行表示一组测试数据,有4个整数a,b,d,n. (1≤a,b≤9,0≤d≤9,1≤n≤10^9) Output 对于每一组数据,输出一个整数占一行

LeetCode: Count and Say 题解

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

leetcode——Reverse Integer 反转整数数字(AC)

Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 这个题比较简单,考虑特殊情况如12000,注意检查反转后数字是否会越界溢出.代码如下: class Solution { public: int reverse(int x) { bool minus = false; short int splitNum[10]; int i = 0, j = 0; unsign

51nod 1770 数数字

1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题  收藏  关注 统计一下 aaa ? aaan个a × b 的结果里面有多少个数字d,a,b,d均为一位数. 样例解释: 3333333333*3=9999999999,里面有10个9. Input 多组测试数据. 第一行有一个整数T,表示测试数据的数目.(1≤T≤5000) 接下来有T行,每一行表示一组测试数据,有4个整数a,b,d,n. (1≤a,b≤9,0≤d≤

[LeetCode] Count Numbers with Unique Digits 计算各位不相同的数字个数

Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Example: Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99]) Hint: A direct