以递增的顺序和最佳方式打印(3 ^ i * 7 ^ j)的值

时间:2013-08-25 10:29:24

标签: algorithm loops dynamic-programming

我遇到了一个面试问题,要求您以递增的顺序打印3i * 7j的值,但是要以最佳方式打印。

  

30 * 70 = 1
  31 * 70 = 3
  30 * 71 = 7
  32 * 70 = 9
  31 * 71 = 21
  33 * 70 = 27

依旧......

3 个答案:

答案 0 :(得分:3)

您可以使用heap。首先插入最小值(3^0 * 7^0)。在每个步骤中,打印最小值(这将是堆的根目录),将其删除,然后将3 * minimum7 * minimum添加到堆中。

这有O(log n)时间复杂度。

答案 1 :(得分:0)

A(i,j)=3^i * 7^j
when i != 0 and j != 0:
    A(i,j)=A(i-1,j-1)*21
when i!=0 and j==0:
    A(i,0)=A(i-1,0)*3
when i==0 and j!=0:
    A(0,j)=A(0,j-1)*7
when i==0 and j==0:
    A(0,0)=1

您可以将它们存储到二维数组中,以便从中获取前一个值。

答案 2 :(得分:0)

当你说最佳时,我唯一可以想到的是计算它并在表中保存值。然后只计算乘法

     long[] threePower = new long[10];
     long[] sevenPower = new long[10];

     threePower[0] = sevenPower[0] = 1;
     for (int i = 1; i < 10; i++)
     {
        threePower[i] = threePower[i - 1]*3;
        sevenPower[i] = sevenPower[i - 1] * 7;
     }

然后打印组合