vector<string> wordBreak(string s, unordered_set<string> &dict) { //程序的一个意思就是,在一个大循环i里面,再设置一个小循环j //数组Br[i][j]代表从j到i可以分开,且在之前的都没有问题 //条件就是从j到i能够在提供的所有字符串中找到,且Br[j-1]不为空---意思就是我从0到j也能够被分割,至于存放啥,不管。 vector<string> result; if(s.empty()){ result.push_back(""); return result; } const int n=s.size(); vector <vector <int> >Br(n,vector<int>()); for (int i=0;i<n;i++){ for (int j=i;j>=0;j--){ if (dict.find(s.substr(j,i-j+1))!=dict.end()&&(j==0||!Br[j-1].empty())){ //从j开始 Br[i].push_back(j); } } } vector<string> answer; breakHelper(s,n-1,Br,answer,result); return result; }
vector<string> wordBreak(string s, unordered_set<string> &dict) { /* https://oj.leetcode.com/problems/word-break-ii/ */ vector<string> result; if (s.empty()) { result.push_back(""); return result; } const int n = s.size(); vector<vector<int> > Br(n, vector<int>()); for (int i = 0; i < n; i++) { for (int j = i; j >= 0; j--) { if (dict.find(s.substr(j, i-j+1)) != dict.end() && (j == 0 || !Br[j-1].empty())) { Br[i].push_back(j); } } } vector<string> answer; breakHelper(s, n-1, Br, answer, result); return result; }
inline int solve (int sys, int n, int const* Ap, int const* Ai, traits::complex_d const* Ax, traits::complex_d* X, traits::complex_d const* B, void *Numeric, double const* Control, double* Info) { int nnz = Ap[n]; bindings::detail::array<double> Axr (nnz); if (!Axr.valid()) return UMFPACK_ERROR_out_of_memory; bindings::detail::array<double> Axi (nnz); if (!Axi.valid()) return UMFPACK_ERROR_out_of_memory; traits::detail::disentangle (Ax, Ax+nnz, Axr.storage(), Axi.storage()); bindings::detail::array<double> Br (n); if (!Br.valid()) return UMFPACK_ERROR_out_of_memory; bindings::detail::array<double> Bi (n); if (!Bi.valid()) return UMFPACK_ERROR_out_of_memory; traits::detail::disentangle (B, B+n, Br.storage(), Bi.storage()); bindings::detail::array<double> Xr (n); if (!Xr.valid()) return UMFPACK_ERROR_out_of_memory; bindings::detail::array<double> Xi (n); if (!Xi.valid()) return UMFPACK_ERROR_out_of_memory; int status = umfpack_zi_solve (sys, Ap, Ai, Axr.storage(), Axi.storage(), Xr.storage(), Xi.storage(), Br.storage(), Bi.storage(), Numeric, Control, Info); if (status != UMFPACK_OK) return status; traits::detail::interlace (Xr.storage(), Xr.storage() + n, Xi.storage(), X); return status; }
inline int scale (int n, traits::complex_d* X, traits::complex_d const* B, void* Numeric) { bindings::detail::array<double> Br (n); if (!Br.valid()) return UMFPACK_ERROR_out_of_memory; bindings::detail::array<double> Bi (n); if (!Bi.valid()) return UMFPACK_ERROR_out_of_memory; traits::detail::disentangle (B, B+n, Br.storage(), Bi.storage()); bindings::detail::array<double> Xr (n); if (!Xr.valid()) return UMFPACK_ERROR_out_of_memory; bindings::detail::array<double> Xi (n); if (!Xi.valid()) return UMFPACK_ERROR_out_of_memory; int status = umfpack_zi_scale (Xr.storage(), Xi.storage(), Br.storage(), Bi.storage(), Numeric); if (status != UMFPACK_OK) return status; traits::detail::interlace (Xr.storage(), Xr.storage() + n, Xi.storage(), X); return status; }
int main( int argc, char **argv ) { Hubo_Control hubo("proto-manip-daemon"); ach_channel_t chan_manip_cmd; int r = ach_open( &chan_manip_cmd, CHAN_HUBO_MANIP, NULL ); daemon_assert( r==ACH_OK, __LINE__ ); hubo_manip_cmd manip; memset( &manip, 0, sizeof(manip) ); hubo.update(); Eigen::Isometry3d Br, Bl; Vector6d right, left, zeros; zeros.setZero(); Vector3d rtrans, ltrans, langles, rangles; hubo.getRightArmAngles(right); hubo.getLeftArmAngles(left); hubo.huboArmFK( Br, right, RIGHT ); hubo.huboArmFK( Bl, left, LEFT ); std::cout << "Performed initial FK" << std::endl; for(int i=0; i<3; i++) { manip.translation[RIGHT][i] = Br(i,3); manip.translation[LEFT][i] = Bl(i,3); } std::cout << "Putting first transformation" << std::endl; ach_put( &chan_manip_cmd, &manip, sizeof(manip) ); size_t fs; std::cout << "About to start loop" << std::endl; while( !daemon_sig_quit ) { hubo.update(); ach_get( &chan_manip_cmd, &manip, sizeof(manip), &fs, NULL, ACH_O_LAST ); for(int i=0; i<3; i++) { rtrans(i) = manip.translation[RIGHT][i]; ltrans(i) = manip.translation[LEFT][i]; rangles(i) = manip.eulerAngles[RIGHT][i]; langles(i) = manip.eulerAngles[LEFT][i]; } // Handle the right arm Br = Eigen::Matrix4d::Identity(); Br.translate(rtrans); Br.rotate( Eigen::AngleAxisd(rangles(0), Vector3d(1,0,0)) ); Br.rotate( Eigen::AngleAxisd(rangles(1), Vector3d(0,1,0)) ); Br.rotate( Eigen::AngleAxisd(rangles(2), Vector3d(0,0,1)) ); hubo.huboArmIK( right, Br, zeros, RIGHT ); hubo.setRightArmAngles( right ); // Handle the left arm Bl = Eigen::Matrix4d::Identity(); Bl.translate(ltrans); Bl.rotate( Eigen::AngleAxisd(langles(0), Vector3d(1,0,0)) ); Bl.rotate( Eigen::AngleAxisd(langles(1), Vector3d(0,1,0)) ); Bl.rotate( Eigen::AngleAxisd(langles(2), Vector3d(0,0,1)) ); hubo.huboArmIK( left, Bl, zeros, LEFT ); hubo.setLeftArmAngles( left ); // Send commands off to the control daemon hubo.sendControls(); } ach_close( &chan_manip_cmd ); }