我遇到了一个面试问题,要求您以递增的顺序打印3i * 7j
的值,但是要以最佳方式打印。
30 * 70 = 1
31 * 70 = 3
30 * 71 = 7
32 * 70 = 9
31 * 71 = 21
33 * 70 = 27
依旧......
答案 0 :(得分:3)
您可以使用heap。首先插入最小值(3^0 * 7^0
)。在每个步骤中,打印最小值(这将是堆的根目录),将其删除,然后将3 * minimum
和7 * 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;
}
然后打印组合