Codingbat- Recursion1- count7

时间:2014-04-17 15:07:58

标签: java

任何人都可以帮我编写下一个问题(取自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"来编程问题。

13 个答案:

答案 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);  
}

the same with only one return

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