画圆的沙滩

亦简亦美

有意义的电话号码

编程之美的作者把3.2节的难度设定为三星,私下以为在二星左右。书中的解法二即最简版的深搜实现。而解法一实际是在枚举。

事实上,这个问题十分类似于anagram问题。关于anagram问题,编程珠玑上有很细致的讨论。如果有兴趣的话,也可以尝试下面这道题:

http://poj.org/problem?id=1002

关于枚举的实现,我还是更喜欢实现一个类似于next_permutation的方法,然后用do...while循环来遍历。

bool next_number(vector<int>& digits, const vector<int>& ranges) {
size_t i
= 0;
for (; i < digits.size() && digits[i] + 1 >= ranges[i]; ++i);
if (i >= digits.size()) return false;

++digits[i];
while (--i) digits[i] = 0;
return true;
}

posted on 2011-03-23 20:41  acmaru  阅读(257)  评论(0编辑  收藏  举报

导航