剑指 Offer 13. 机器人的运动范围(dfs)
class Solution {
public:
bool visited[101][101]={false};
int movingCount(int m, int n, int k) { return dfs(0,0,m,n,k); }
int dfs(int x,int y,int m,int n,int k) {
if(x>m-1||y>n-1||visited[x][y]||(x%10+x/10+y%10+y/10)>k) return 0; visited[x][y]=true;
return 1+dfs(x+1,y,m,n,k)+dfs(x,y+1,m,n,k); }};
剑指 Offer 14- I. 剪绳子
class Solution {public:
int cuttingRope(int n) {
if(n==1) return 0;
if(n==2) return 1;
if(n==3) return 2;
vector<int>dp(n+1); dp[0]=0; dp[1]=1; dp[2]=2; dp[3]=3;
int max=0;
for(int i=4;i<=n;i++) { max=0;
for(int j=1;j<=i/2;j++) { int d=dp[j]*dp[i-j]; if(d>max) { max=d; } } dp[i]=max; } max=dp[n]; return max; }};
剑指 Offer 14- II. 剪绳子 II(取模不能用dp)
class Solution {public:
int cuttingRope(int n) { if(n==2) return 1; if(n==3) return 2; long long res=1; while(n>4) { res*=3; res=res%1000000007; n-=3; } return (int)(res*n%1000000007); }};
剑指 Offer 15. 二进制中1的个数
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt=0;
for(int i=0;i<32;i++) {
if((n>>i)&0x00000001) cnt++; } return cnt; }};
剑指 Offer 16. 数值的整数次方(快速幂)
class Solution {public:
double myPow(double x, int n) {
double res=1;
int t=n;
while(n) { if(n&1)res*=x; x*=x; n/=2; } return t>0?res:1.0/res; }};