问题描述:
问题分析:
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;
}
};
结果展示: