-3

给定一个非负整数 n,我如何返回一个数字的出现次数,例如 7,例如 717 产生 2?(没有循环)。这是我的代码,但效果不佳。

 public int count7(int n) {
int count = 0;
  if(n==7){
  count++;

  return count;
  }
 else if(n>7 && n<100)

  return count7(n/10)+count7(n%10);

  else if( n>100)

  return count7(n/10)+count7(n%10);

  else return 0;

}
4

4 回答 4

3

您的代码似乎应该可以工作。不确定您所说的“效果不佳”是什么意思。这是同一解决方案的更简洁/更短的版本:

int count7(int n) {
    if(n == 0) return 0;
    return (n%10 == 7 ? 1 : 0) + count7(n/10);
}
于 2014-12-17T16:24:11.913 回答
1

为了它的乐趣:

  public static int count7( int n ) {
    return Integer.toString( n )
                  .replaceAll( "[^7]" , "" )
                  .length();
  }

可能更适合编码高尔夫 ,-)

于 2014-12-17T16:20:24.373 回答
0

快速解决方案:

return Integer.toString(n).split("7").length-1;

当您想查看数字的十进制表示中的数字时,让已经可用和优化的数字字符串化函数来完成这项工作通常是合理的(即Integer.toString(yournumber))。当然后面有循环,但在递归调用的实现中甚至有循环......

于 2014-12-17T16:19:22.327 回答
0

这是一个解决方案:

public int count(int number, int digit){
    String numberToString = new Integer(number).toString();
    String digitToString = new Integer(digit).toString();
    return StringUtils.countMatches(numberToString,digitToString);
}

它会为你计算有多少digitnumber

所以count(717,7)会回来2

于 2014-12-17T16:19:25.580 回答