我想编写一个递归算法来计算一个1和0的字符串,并确定该字符串是否有效。如果字符串连续包含3个零,则该字符串无效。
例如:
1010010001无效
1111101101有效
1000111101无效
我不知道如何编写这个算法。感谢您的任何帮助。
答案 0 :(得分:3)
你可以这样做(假设 str 是你的字符串, n 是它的长度,索引是基于0)
func ( index )
if index >= n
return true
if index < 2
return func(index+1)
if str[index] is 0 and str[index-1] is 0 and str[index-2] is 0
return false
return func(index+1)
// call func(0) , assuming str is global , also answer is boolean
answer = func(0)
时间复杂度 O(n)。只是为了完成这样一个直截了当 我只是使用循环迭代地编写它。
//This is in c/c++
bool answer = true;
for(i = 2;i < n;i++)
{
if(str[i] == '0' && str[i-1] == '0' && str[i-2] == '0')
answer = false;
}
答案 1 :(得分:0)
public static boolean isValid(String s){
return isValidInt(s)==3;
}
private static int isValidInt(String s){
if( s == null || s.length() ==0)
return 0;
int prevSum=isValidInt(s.substring(1));
if( prevSum == 3 )
return 3;
return s.charAt(0) != '0' ?0:1+prevSum;
}