亲7数(全排列)
题解
思路
- 计算所有可能的排列;
- 0一旦打头,进行下一次遍历;
- 判断每一条路径是否为亲7数,是则++,重复也++;
代码
class Solution {
int count;
public:
/*
pinNum:固定位数
len:排列总数
*/
void permute(int nums[], int pinNum, int len) {
/* end condition */
if (pinNum + 1 == len) {
long cur = 0;
for (int i = 0; i < len; i++) {
cur = cur * 10 + nums[i];
}
/* Is't reletive 7 */
if (cur % 7 == 0) {
cout << cur << " ";
count++;
}
return;
}
/* backtrack */
for (int i = pinNum; i < len; i++) {
/* len-pinNum个数中选一个放在pinNum的位置 */
swap(nums[i], nums[pinNum]);
/* not 0 */
if (!nums[0]) {
continue;
}
/* recursion */
permute(nums, pinNum + 1, len);
swap(nums[i], nums[pinNum]);
}
}
/*
digit:首元素指针
digitLen:总元素个数
*/
int reletive_7(int *digit, int digitLen) {
/* full permutation */
permute(digit, 0, digitLen);
return count;
}
};
2020/08/03 13:00
@luxurylu