a*******y 发帖数: 1040 | 1 you are given nos 1,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 u hav to form a 9 digit no such
dat 1st 2 digits are divisible by 2,1st 3 digits are divisible by 3,1st 4
digits are divisible by 4 and so on..... (repetitions not allowed)
但是我觉得那个最后fail的情况我return -1 不太好,这样即使fail了还会再在这个错
的上面try组合,虽然我让他即使退出了,但是还会有函数调用在stack上,还有怎么能
让这个函数return那个正确的值哪?本体只有一个正确的值
int GenerateNumber(string input, int digit, bool used[],int number, int n)
{
int temp = 0;
//early termination if failed
int numbeofdigit = 0;
int tempnumber = number;
while (tempnumber)
{
tempnumber /= 10;
numbeofdigit++;
}
if (numbeofdigit < digit)
return -1;
if (digit == 9)
{
cout << number<< endl;
return number;
}
for (int i = 0; i
{
if (!used[i])
{
if (digit >= 1)
{
if ((number*10 + (input[i] - '0'))%(digit+1) == 0)
{
int total = number*10 + (int)(input[i] - '0');
used[i] = true;
temp = GenerateNumber(input, digit+1, used, total,n);
used[i] = false;
}
}
else
{
int total = number * 10 + (int)(input[i] - '0');
used[i] = true;
temp = GenerateNumber(input, digit+1, used, total,n);
used[i] = false;
}
}
}
return -1;
} | p*****2 发帖数: 21240 | | a*******y 发帖数: 1040 | | p*****2 发帖数: 21240 | | l******n 发帖数: 9344 | 5 这题有问题,1st 5 digits are divisible by 5,就说个位数必须是5,但是1st 2
digits are divisible by 2,说个位数必须是偶数
我理解有问题?
【在 a*******y 的大作中提到】 : you are given nos 1,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 u hav to form a 9 digit no such : dat 1st 2 digits are divisible by 2,1st 3 digits are divisible by 3,1st 4 : digits are divisible by 4 and so on..... (repetitions not allowed) : 但是我觉得那个最后fail的情况我return -1 不太好,这样即使fail了还会再在这个错 : 的上面try组合,虽然我让他即使退出了,但是还会有函数调用在stack上,还有怎么能 : 让这个函数return那个正确的值哪?本体只有一个正确的值 : int GenerateNumber(string input, int digit, bool used[],int number, int n) : { : int temp = 0; : //early termination if failed
| p*****2 发帖数: 21240 | 6
你理解有问题吧?看我答案。
【在 l******n 的大作中提到】 : 这题有问题,1st 5 digits are divisible by 5,就说个位数必须是5,但是1st 2 : digits are divisible by 2,说个位数必须是偶数 : 我理解有问题?
| l******n 发帖数: 9344 | 7 好像全部从左边算起的,我想的是右边
【在 p*****2 的大作中提到】 : : 你理解有问题吧?看我答案。
| p*****2 发帖数: 21240 | 8
嗯。很常规的一道题。楼主是面啥公司碰到的?
【在 l******n 的大作中提到】 : 好像全部从左边算起的,我想的是右边
| a*******y 发帖数: 1040 | 9 对,这题很常规,recursion就行了,我的问题不是这个,我的问题是怎么修改让他返
回正确值 | p*****2 发帖数: 21240 | 10
int dfs(StringBuffer sb, boolean[] visited)
{
int len=sb.length();
if(len>0 && Integer.parseInt(sb.toString())%len!=0)
return -1;
if(len==9)
return Integer.parseInt(sb.toString());
for(int i=1;i<=9;i++)
{
if(!visited[i])
{
sb.append(i);
visited[i]=true;
int ret=dfs(sb,visited);
visited[i]=false;
sb.deleteCharAt(sb.length()-1);
if(ret>0)
return ret;
}
}
return -1;
}
【在 a*******y 的大作中提到】 : 对,这题很常规,recursion就行了,我的问题不是这个,我的问题是怎么修改让他返 : 回正确值
| a*******y 发帖数: 1040 | 11 你这个和我写的那个没啥区别,却别是你用java
not all path have return value
【在 p*****2 的大作中提到】 : : int dfs(StringBuffer sb, boolean[] visited) : { : int len=sb.length(); : : if(len>0 && Integer.parseInt(sb.toString())%len!=0) : return -1; : : if(len==9) : return Integer.parseInt(sb.toString());
| p*****2 发帖数: 21240 | 12
你的问题是什么?
【在 a*******y 的大作中提到】 : 你这个和我写的那个没啥区别,却别是你用java : not all path have return value
|
|