leetcode38. 外观数列

短命女 2023-07-23 10:00 103阅读 0赞

题目描述:

「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:

  1. 1. 1
  2. 2. 11
  3. 3. 21
  4. 4. 1211
  5. 5. 111221

1 被读作 "one 1" ("一个一") , 即 11
11 被读作 "two 1s" ("两个一"), 即 21
21 被读作 "one 2", “one 1""一个二" , "一个一") , 即 1211

给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。

注意:整数序列中的每一项将表示为一个字符串。

思路:

思路不难,实现起来稍微复杂。就是按照你在纸上求解的思路,进行实现。遍历的时候计数,碰到不同的数字就把前面记录的写下来。当遍历到最后也到再添加记录。整体的思路比较明确,但是实现的方式还是复杂很多。可以用其他的容器来消除冗余代码。

  1. class Solution {
  2. public String countAndSay(int n) {
  3. // 添加原始数据1
  4. List<Character> original = new ArrayList<Character>();
  5. original.add('1');
  6. if(n == 1)
  7. return "1"; // 基础样例
  8. List<Character> replace; // 替换数组
  9. int i, j, count = 0;
  10. char temp;
  11. for(j = 1; j < n; j++) {
  12. count = 0;
  13. temp = original.get(0);
  14. replace = new ArrayList<Character>();
  15. for(i = 0; i < original.size(); i++) {
  16. if(original.get(i) == temp) { // 找个数
  17. count++;
  18. }
  19. if(original.get(i) != temp) { // 碰到不同就add
  20. replace.add(String.valueOf(count).charAt(0)); // 这里添加int类型的数字要转型
  21. replace.add(temp);
  22. temp = original.get(i);
  23. count = 1;
  24. }
  25. if(i == original.size() - 1) { // 遍历到最后再add一次
  26. replace.add(String.valueOf(count).charAt(0));
  27. replace.add(temp);
  28. original = replace;
  29. break;
  30. }
  31. }
  32. }
  33. StringBuilder sBuilder = new StringBuilder(); // 最后把数组转为字符串
  34. for(char x : original)
  35. sBuilder.append(x);
  36. return sBuilder.toString();
  37. }
  38. }

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读

    相关 38. 外观数列

    打卡!!!每日一题 今天给大家带来一道比较有意思的题目,先看看题目描述 题目描述: ![在这里插入图片描述][82dc3a8d28064fa79835d3bb5c71f