【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;    
	}
};

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

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页