【let code】967.连续差相同的数字

问题描述:
在这里插入图片描述
问题分析:
1.可分三种情况进行讨论:
N=1时,不论K为多少,结果都是0,1,2,3,4,5,6,7,8,9;
K=0时,不论N为多少, 结果都是(111…)222…)(333…)…(999…);
一般情况;

2.相差为K的数字, 表明每一位有两种选择:前一位加K和前一位减K;(加减后判别是否在数字范围内);3.由于N>1,表明会出现多位,每一位的选择都会带来最终结果的变化,所以应使用深搜算法;
完整代码:

class Solution {
public:    
	vector<int> res;    
	int getnum(string s)    
	{        
		int sum = 0;        
		for(int i = 0; i < s.size(); i++)            
			sum = sum*10 + (s[i]-'0');        
		return sum;    
	}    
	void getstring(int N, int K, string s)    
	{        
		int n = s.size();        
		if (n == N)            
			res.push_back(getnum(s));        
		else        
		{            
			char c1 = s[n-1] + K, c2 = s[n-1] - K;            
			if (c2 >= '0')                
				getstring(N, K, s+c2);            
			if (c1 <= '9')                
				getstring(N, K, s+c1);        
		}    
	}    
	vector<int> numsSameConsecDiff(int N, int K)     
	{        
		if (N == 1)        
		{            
			for (int i = 0; i < 10; i++)                
				res.push_back(i);        
		}        
		else   if (K == 0)            
		{                
			for (int i = 1; i < 10; i++)                
			{                    
				int t = N;                    
				long long int sum = 0;                    
				while(t--)                        
					sum = sum*10 + i;                                    
				res.push_back(sum);                
			}            
		} 
		else                
		for (char i = '1'; i <= '9'; i++)                
		{                    
			string s;                    
			s += i;                    
			getstring(N,K,s);                
		}        
		return res;    
	}
};

结果展示:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值