任何人都可以帮我编写下一个问题(取自Codingbat - Recursion1 - count7)
如果非负int n,
返回occurrences of 7 as a digit
的计数,例如717 yields 2.
(无循环)。请注意,mod (%)
乘以10会产生rightmost digit (126 % 10 is 6),
,而除(10)除去最右边的数字(126/10为12)。
count7(717) → 2
count7(7) → 1
count7(123) → 0
有一些解决方案包括"返回"。 我想用1" return"来编程问题。
答案 0 :(得分:5)
那么这里是the solution I wrote,让我们看看如何只用一次回复
public int count7(int n)
{
int c = 0;
if (7 > n)
{
return 0;
}
else
{
if ( 7 == n % 10)
{
c = 1;
}
else
{
c = 0;
}
}
return c + count7(n / 10);
}
public int count7(int n)
{
return (7 > n) ? 0 : ( ( 7 == n % 10) ? 1 + count7(n / 10) : 0 + count7(n / 10));
}
答案 1 :(得分:2)
public int count7(int n) {
int counter = 0;
if( n % 10 == 7) counter++;
if( n / 10 == 0) return counter;
return counter + count7(n/10);
}
答案 2 :(得分:1)
确保PFB在JAVA中使用相同的解决方案
public int count7(int n) {
if((n / 10 == 0) && !(n % 10 == 7)) //First BASE CASE when the left most digit is 7 return 1
return 0;
else if((n / 10 == 0) && (n % 10 == 7)) //Second BASE CASE when the left most digit is 7 return 0
return 1;
else if((n % 10 == 7))
//if the number having 2 digits then test the rightmost digit and trigger recursion trimming it there
return 1 + count7(n / 10);
return count7(n / 10);
}
答案 3 :(得分:1)
public int count7(int n) {
if(n == 0)
return 0;
else{
if(n%10 ==7)
return 1+count7(n/10);
return 0+count7(n/10);
}
}
答案 4 :(得分:1)
public static int count7(int n){
if(n == 7)
return 1;
else if(n > 9){
int a = count7(n%10);
int b = count7(n/10);
return a + b;
}else
return 0;
}
答案 5 :(得分:1)
public int count7(int n)
{
if(n==0)return 0;
if(n%10==7)return 1+count7(n/10);
else return count7(n/10);
}
答案 6 :(得分:1)
public int count7(int n) {
if (n != 7 && n < 10) return 0;
else if (n == 7) return 1;
else if (n%10 == 7) return count7(n/10) + 1 ;
else return count7(n/10);
}
答案 7 :(得分:1)
public int count7(int n){
if(n < 7)
return 0;
else if(n % 10 == 7)
return 1 + count7(n / 10);
else
return count7(n / 10);
}
第一个if语句是我们想要终止的基本情况。第二个检查是否最右边的数字是7.如果是,请关闭最右边的数字并再试一次。当递归调用终止并且值开始从链返回时,添加1以包括此成功检查。如果上述两种说法都不成立,请砍掉最右边的数字并重试。
我知道这是2岁,但希望这更具可读性和直观性,因此很有帮助。
答案 8 :(得分:0)
使用一次返回可能会使其难以阅读。如果计算递归中的出现次数,一个简单的公式是创建一个基础案例来终止,然后提供增量返回,最后一个返回将有助于在没有递增的情况下到达基本情况。例如..
public int count7(int n) {
if(n == 0) return 0;
if(n % 10 == 7) return 1 + count7(n / 10);
return count7(n / 10);
}
在我看来使用像下面那样的单行回报因为双三元而更难阅读或更新..
public int count7(int n)
{
return (n == 0) ? 0 : (n % 10 == 7) ? 1 + count7(n / 10) : count7(n / 10);
}
答案 9 :(得分:0)
我的解决方案通过获取输入的模数,从第n个数字向后移动到第一个数字。我们将找到的七位数添加到返回中,以得到最终输出。
然后下一步是检查输入是否小于7。如果输入小于7,则输入中永远不会有7s。
public int count7(int n) {
int sevens_found = 0;
if( n % 10 == 7 ) sevens_found ++;
return ( n < 7) ? 0 : ( n % 10 == 7 ) ? sevens_found + count7 ( n / 10 ) : count7 ( n / 10 );
}
答案 10 :(得分:0)
data[0]
答案 11 :(得分:0)
import cv2
import os
#import math
#from moviepy.editor import *
import numpy as np
import glob
img_array = []
x = 0
for filename in glob.glob('./data/*.png'):
filename = './data/' + str(int(x)) + ".png"
img = cv2.imread(filename)
height, width, layers = img.shape
size = (width, height)
img_array.append(img)
x+=1
out = cv2.VideoWriter('project.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 30, size)
x=0
for i in img_array:
out.write(img_array[x])
x+=1
out.release()
try:
if not os.path.exists('VideoPic'):
os.makedirs('VideoPic')
except OSError:
print('Error: Creating directory of data')
cap = cv2.VideoCapture('project.mp4')
frameRate = cap.get(30) # frame rate
x = 0
while(cap.isOpened()):
frameId = cap.get(0) #current frame number
ret, frame = cap.read()
if (ret != True):
break
else:
filename = './VideoPic/' + str(int(x)) + ".png";x+=1
cv2.imwrite(filename, frame)
cap.release()
cv2.destroyAllWindows()
答案 12 :(得分:0)
n == 0 的基本情况只是“打破”了递归循环,n % 10 == 7 允许我们实际计算整数中 7 的数量,并且 return 语句遍历给定的论证。
public int count7(int n) {
if (n == 0) return 0;
if (n % 10 == 7) return 1 + count7(n / 10);
return count7(n / 10);
}