题目要求

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.

英文的题目有点绕口,所以去网上找了一下题目的意思。
题目的核心逻辑在于将口语化的数数字转化为字符串。
例如
如果一串数字是1,则是11,对应的字符串为11
如果一串数字是11,则是21,对应的字符串为21
如果一串数字是1211,则是11,接着12,接着21,对应的字符串为111221
题目中输入n,则方法对第n-1个数数字结果再一次进行数数字,并返回字符串
所以输入1对应1,输入2则是对前一个1进行数数字得到11(1个1),输入3则是对11进行数数字得到21(2个1),并以此类推下去

思路1:循环

可以看出来,每一个n对应的字符串是唯一的,要得到第n个结果就必须获得第n-1个结果,直至最小值1

    public String countAndSay(int n) {
            if(n==1){
                return "1";
            }
            StringBuilder s = new StringBuilder("1");
            StringBuilder result = new StringBuilder();
            for(int i = 1 ; i<n ; i++){
                char temp = s.charAt(0);
                int count = 0;
                for(int j = 0 ; j<s.length() ; j++){
                    if(temp == s.charAt(j)){
                        count++;
                    }else{
                        result.append(count);
                        result.append(temp);
                        temp = s.charAt(j);
                        count = 1;
                    }
                }
                result.append(count);
                result.append(temp);
                s = result;
                result = new StringBuilder();
            }
            return s.toString();
        }

在这里要强调一下,一定要使用StringBuilder来存储临时的结果,具体原因可以去查一下String和StringBuilder的差别,以后有机会我在博客中详细介绍一下

clipboard.png
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~


raledong
2.7k 声望2k 粉丝

心怀远方,负重前行