LetCode刷题

直接求解

38.外观数列

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

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

1 被读作 “one 1” (“一个一”) , 即 11。
11 被读作 “two 1s” (“两个一”), 即 21。
21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。
注意:整数序列中的每一项将表示为一个字符串。1

求解思路:

  1. 每次与之前元素比较是否相同;
    1.1若相同次数加一
    1.2若不同,更新数据(sb.append(),重新计数)
  2. 最后更新之前元素

Java代码

	   public String countAndSay(int n) {
	        if(n < 0) return  null;
	        if(n == 1) return "1";
	        
	        String str = "1";
	        
	        for (int i = 2;i<= n;i++){
	        	//每做一次从0开始计数
	            int count = 0;
	            char c =  '.';
	            StringBuilder sb = new StringBuilder();
	            
	            for (int j = 0;j<str.length();j++){
	            	
	                if(str.charAt(j) == c|| c== '.'){
	                	//当第j个元素和之前元素相同时
	                    count ++;
	                }else{
	                	//当第j个元素和之前元素不同时
	                	//将之前记录的元素加进去
	                    sb.append(count + Character.toString(c));
	                    //记录当前元素的个数
	                    count = 1;
	                }
	                //记录最新的元素
	                c= str.charAt(j);
	            }
	            //最后一个记录的情况并未加进去
	            //最后一次
	            sb.append(count + Character.toString(c));
	            str = sb.toString();
	            
	        }
	        return str;
	    }

  1. https://leetcode-cn.com/problems/count-and-say/ ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值